2013-01-10 101 views
0

我的問題與this問題有關,但我不知何故移動了一步,並使用nunit實現了一個測試框架。使用Revit API的BDD/TDD

當我在Revit中運行測試框架插件時,測試框架以某種方式鎖定測試程序集,從而無法重新編譯測試程序集。爲了解決這個問題,我嘗試製作一個卷影副本,以便nunit測試運行器在複製的程序集上運行。但是,一旦我第一次運行測試,後續測試運行不適用於更新的副本。它就像測試運行程序緩存dll並始終嘗試對緩存副本運行測試。

因此,每次更新測試組件時,都需要關閉 - 重新打開Revit才能運行測試,這是一件非常痛苦的事情。我爲Revit實施測試框架的主要原因是能夠使用Revit API進行BDD/TDD。

這是我如何運行測試的代碼片段:

TestPackage theTestPackage = new TestPackage(testDll); 
    RemoteTestRunner testRunner = new RemoteTestRunner(); 
    testRunner.Load(theTestPackage); 
    TestResult testResult = testRunner.Run(new NullListener()); 

沒有人有任何想法如何解決這個問題?

回答

1

您可以嘗試使用Assembly.Load(byte[])方法加載組件進行測試。我不確定你的測試運行器是否可以處理這個問題,但是這會給你一個程序集來處理從內存中的字節流加載的程序集。因此,可以隨時重新編譯原始程序集文件,並且可以根據需要加載該程序集的許多併發版本。它們都是獨立的,有不同的類型。

我使用RevitPythonShell腳本loadplugin.py的類似策略在運行時加載插件,然後對它們進行測試。除了在XAML中定義的WPF控件外,這似乎工作得很好。我懷疑XAML解析器和加載器保留了這些類型的緩存,但由於時間限制,尚未能夠查看它。

+0

謝謝達仁,我最終不得不修改nunit TestAssemblyBuilder類來從字節數組中加載程序集。希望我現在可以用Revit啓動一些TDD的東西! 至於你提到的XAML測試,不知道你的設置是什麼,但我沒有真正測試控件,因爲我使用MVVM;我只是測試ViewModels。 – alital

相關問題