程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 用Delphi2005和DUnit搭建敏捷開發平台

用Delphi2005和DUnit搭建敏捷開發平台

編輯:Delphi
 

  之前用的是Java那一套東西,有Eclipse什麼都搞定了。現在因為要用Delphi改一個即時通訊軟件的緣故,想著怎麼能把重構和單元測試那一套搬到Delphi這邊來。書上說給現有的代碼加單元測試能夠加深對代碼的理解,並且可以作為改善代碼的基礎,這不正是我要做的事情嗎?於是,為了搭建這麼一個敏捷平台,我以Delphi2005和DUnit進行了一點小小的嘗試,並把結果記錄於下,與大家分享。
  
  1、下載Delphi2005
  因為Borland公司在中國不出售專業版本,鑒於架構師和企業版的天價,所以只能從網絡上下載一個D版的做個人使用。Delphi2005體積比較大,而且Update1也需要CD,所以推薦用BT下載2CD版本。種子的地址如下:
  http://www.delphifans.com/SoftView/821.html
  
  2、下載Delphi2005的sp1
  據說打過這個補丁之後能快一些,但是這個補丁安裝起來可慢了,還需要用光盤。下載地址如下:
  http://www.delphifans.com/SoftView/970.html
  
  3、下載DUnit
  https://sourceforge.net/projects/dunit/
  
  4、安裝Delphi2005+sp1
  注意一下keygen中有一個register以及安裝的時候一定要同時安裝.net和win32版本的delphi,C#builder則無所謂。因為如果只安裝win32版本會導致重構功能不可用(這是delphi2005的一個bug,表現就是用重構的時候出現.net的異常窗口)。
  
  5、精簡Delphi2005
  因為上一步的時候同時安裝了.net版本,導致delphi啟動的時候變得非常慢。這個可以通過修改注冊表,刪掉一些IDE的包來實現。具體的做法是在Delphi的快捷方式目標後面加上參數-rxxx,也就是BDS.exe -rxxx。這個xxx任由你指定,然後你就會在HKEY_CURRENT_USERSoftwareBorlandxxx(這個就是你選定的名字xxx)3.0Known IDE Packages中發現那些該死的包。注意不能和網絡上別的win32純化分子那樣刪得太干淨了,那樣重構就沒法用了。我自己試驗多次之後得出的一個比較精簡的列表如下
  "$(BDS)Binvclmenudesigner90.bpl"="(Untitled)"
  "$(BDS)Binwin32debugproide90.bpl"="(Untitled)"
  "$(BDS)Binhtmide90.bpl"="HTML Designer Package"
  "$(BDS)Biniteidew3290.bpl"="Borland Integrated Translation Environment for Win32"
  "$(BDS)BinSrcManIDE90.bpl"="(Untitled)"
  "$(BDS)Bin odoide90.bpl"="Borland ToDo"
  "$(BDS)Binhtmlhelp290.bpl"="Borland HtmlHelp Viewer"
  "$(BDS)Binidefilefilters90.bpl"="IDE File filters"
  "$(BDS)Binstartpageide90.bpl"="Borland Start Page IDE Package"
  "$(BDS)Bin efactoride90.bpl"="Borland Core Refactoring Package"
  "$(BDS)Bindbkdebugide90.bpl"="(Untitled)"
  "$(BDS)Binexceptiondiag90.bpl"="(Untitled)"
  "$(BDS)indeployide90.bpl"="Deployment Manager"
  "$(BDS)Binplugview90.bpl"="Pluggable Tree View Package"
  "$(BDS)Bincoreproide90.bpl"="Core IDE Pro Package"
  "$(BDS)BinIDETools90.bpl"="Build Tools"
  "$(BDS)Binunittestide90.bpl"="(Untitled)"
  "$(BDS)Binhistoryide90.bpl"="(Untitled)"
  "$(BDS)Binhtmltidy90.bpl"="HTML Tidy Formatter"
  "$(BDS)BinHTMLFmt90.bpl"="HTML Internal Formatter"
  "$(BDS)Binmlcc90.bpl"="Markup Language Code Completion Package"
  "$(BDS)Bindelphivclide90.bpl"="Delphi VCL Designer IDE Package"
  "$(BDS)Bindelphicoreproide90.bpl"="(Untitled)"
  "$(BDS)Binwin32debugide90.bpl"="(Untitled)"
  "$(BDS)Binhtmlide90.bpl"="(Untitled)"
  "$(BDS)Bindelphide90.bpl"="Delphi Win32 IDE Personality"
  "$(BDS)Binmtspro90.bpl"="(Untitled)"
  "$(BDS)Binmtsent90.bpl"="(Untitled)"
  "$(BDS)Biniteidenet90.bpl"="Borland Integrated Translation Environment for .NET"
  "$(BDS)BinNetImportWiz90.bpl"="(Untitled)"
  "$(BDS)BinDataExplorer90.bpl"="(Untitled)"
  雖然啟動還是有些慢,不過總算能忍受了。
  
  6、編譯並安裝DUnit
  用你知道的辦法把DUnit編譯成dcu,放入你指定的目錄。並把該目錄添加到Delphi的Tools->Environment Options->Delphi Options->Library-win32的Library Path中。
  另外把DUnit.exe給編譯出來
  
  7、建立工程
  我推薦的方式是寫Delphi程序的時候把界面和後台分開,具體就是開兩個項目,一個普通的VCL項目,一個DLL項目。不,不,我的意思並不是讓你用DLL這種方式來共享代碼。這個DLL項目包含文件是所有後台的內容,以及對後台的測試。產生的DLL給DUnit用,DUnit能夠從其中讀出測試並運行。而實際上GUI部分的那個工程是包含了所有的文件的,也就是說分與其說分兩個工程,不如說是在原來的單個工程的基礎上加上了一個專門用於測試的DLL工程。
  項目分為三塊:GUI,Core,TestCore。工程一包括GUI+Core,工程二包括Core+TestCore。工程一的輸出是Win32Exe程序。工程二輸出是Win32Dll程序。
  然後可以把這兩個工程放到一個Project Group中。
  
  8、編寫測試
  工程一和普通寫Dephi程序沒有什麼兩樣,要記得把GUI的功能分出來後台,讓後台Testable。測試都是寫在工程二中的,我把工程二的名字就叫做Core。下面就在Core中添加一個最基本的測試,檢查1+1是不是等於2。
  建立TestCase
  
  unit TestBasic;

  interface

  uses
    TestFramework;

  type
    TBasic = class
    public
      function Add(a, b: integer): integer;
    end;

    TTestBasic = class(TTestCase)
    private
      FBasic: TBasic;
    public
      procedure SetUp; override;
      procedure TearDown; override;
    published
      procedure TestAdd;
    end;

  implementation

  function TBasic.Add(a, b: integer): integer;
  begin
    Result := a + b;
  end;

  procedure TTestBasic.SetUp;
  begin
    FBasic := TBasic.Create;
  end;

  procedure TTestBasic.TearDown;
  begin
    FBasic.Free;
  end;

  procedure TTestBasic.TestAdd;
  begin
    CheckEquals(2, FBasic.Add(1, 1));
  end;

  initialization
    RegisterTest('', TTestBasic.Suite);

  end.
  
  修改Core.bdsproj(KAO,什麼古怪的後綴啊)
  把begin end.改成
  exports
    RegisteredTests name 'Test';
  end.
  並在Uses部分添加TestFramework。
  
  DUnit就是通過這個export的函數在dll中找出我們注冊的TestCase的。
  
  9、運行DUnit
  把DUnit添加到Tools菜單下吧,那樣方便許多。只是參數不好填寫。我沒有用裡面的macro,直接填了絕對路徑。如果你和我一樣這樣直接填的絕對路徑,那麼從Tools菜單下選DUnit就能直接看到一個測試列表了,點運行就會看到一個綠燈亮起了。
  如果你不是把DUnit添加到Tools菜單,那麼就要從File->Load Test的文件選擇窗口中找到Core項目編譯出來的dll,core.dll。
  
  ————
  
  至此重構功能和單元測試都有了。剩下的就是給既有代碼添加測試,然後慢慢重構的事情了。
  


 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved