BDD/TDD with Revit API

本文关键字:Revit API with TDD BDD | 更新日期: 2023-09-27 17:51:07

我的问题与这个问题相关,但是我已经更进一步,使用nunit实现了一个测试框架。

当我在Revit中运行测试框架插件时,测试框架以某种方式锁定了测试程序集,使得无法重新编译测试程序集。为了解决这个问题,我尝试创建一个影子副本,以便在复制的程序集上运行非单元测试运行程序。但是,一旦我第一次运行测试,后续的测试运行就不能在更新的副本上工作。这就像测试运行器缓存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());

有人知道怎么解决这个问题吗?

BDD/TDD with Revit API

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

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