对动态创建的程序集进行单元测试

本文关键字:单元测试 程序集 动态 创建 | 更新日期: 2023-09-27 18:09:45

我以前问过类似的问题,但我们把这件事放在一边,我们回到了问题上。我们试图实现的是在动态创建的dll上运行单元测试。

我们有一些API供QA工程师在我们的应用程序中插入脚本。QA工程师在我们的应用程序编辑器中编写一些代码,然后在运行时编译代码,并作为汇编保存在磁盘上。

我们希望能够在此动态创建的程序集上运行一组测试。我们强迫我们的QA团队从一些基类中继承并重写一些方法,这些是我们想要测试的方法…

你将如何实现这个?任何想法都会有帮助。谢谢。

对动态创建的程序集进行单元测试

您必须检查动态程序集中的类型,并找到那些派生自基类的组合类型。假设它们都有无参数构造函数,您可以这样做:

Assembly dynamicAssembly = //generated
var derivedInstances = dynamicAssembly.GetTypes()
    .Where(t => !t.IsAbstract && t.IsSubclassOf(typeof(BaseClass)))
    .Select(t => (BaseClass)Activator.CreateInstance(t));
foreach(BaseClass bc in derivedInstances)
{
    //run tests
}

从上面看,您需要使用某些方法创建动态创建的dll中定义的类的实例(反射是一种方式)。将这些对象强制转换为基类类型,然后您应该能够执行基类的方法。

在我看来更有趣的是:当你执行一个方法时,你将如何定义什么是正确的结果?我想说的是,你的QA工程师还需要指定预期的单元测试结果。