C# 带Revit API的BDD/TDD

C# 带Revit API的BDD/TDD,c#,.net,nunit,revit,revit-api,C#,.net,Nunit,Revit,Revit Api,我的问题和这个问题相关,但不知何故,我又前进了一步,并使用nunit实现了一个测试框架 在Revit内部运行测试框架加载项时,测试框架会以某种方式锁定测试程序集,从而无法重新编译测试程序集。为了解决这个问题,我尝试创建一个卷影副本,以便nunit测试运行程序在复制的程序集上运行。但是,一旦我第一次运行测试,后续的测试运行在更新的副本上就不起作用了。这就像测试运行程序缓存DLL并始终尝试在缓存的副本上运行测试一样 因此,每次更新测试部件时,我都需要关闭并重新打开Revit来运行测试,这是一个真正的

我的问题和这个问题相关,但不知何故,我又前进了一步,并使用nunit实现了一个测试框架

在Revit内部运行测试框架加载项时,测试框架会以某种方式锁定测试程序集,从而无法重新编译测试程序集。为了解决这个问题,我尝试创建一个卷影副本,以便nunit测试运行程序在复制的程序集上运行。但是,一旦我第一次运行测试,后续的测试运行在更新的副本上就不起作用了。这就像测试运行程序缓存DLL并始终尝试在缓存的副本上运行测试一样

因此,每次更新测试部件时,我都需要关闭并重新打开Revit来运行测试,这是一个真正的难题。我实现Revit测试框架的主要原因是能够使用Revit API执行BDD/TDD

这是我如何运行测试的代码片段:

TestPackage theTestPackage=新的测试包(testDll);
RemoteTestRunner testRunner=新的RemoteTestRunner();
testRunner.Load(测试包);
TestResult TestResult=testRunner.Run(新的NullListener());

有人知道如何解决这个问题吗?

您可以尝试使用
Assembly.Load(byte[])
方法加载assemby进行测试。我不确定您的测试运行程序是否能够处理这个问题,但这将为您提供一个从内存中的字节流加载的程序集。因此,可以随时重新编译原始程序集文件,并且可以加载任意多个此程序集的并发版本。它们都是独立的,具有不同的类型


我在RevitPythonShell脚本中使用了类似的策略,用于在运行时加载插件,然后对它们进行测试。除了XAML中定义的WPF控件之外,这似乎工作得很好。我怀疑XAML解析器和加载器保留了类型的缓存,但由于时间限制,还无法对此进行研究。

多亏了Daren,我最终不得不修改nunit TestAssemblyBuilder类以从字节数组加载程序集。希望我现在可以使用Revit开始一些TDD工作!至于您提到的XAML测试,不确定您的设置是什么,但我没有真正测试控件,因为我使用的是MVVM;我只是测试ViewModels。