我正在使用Visual Studio 2015在.NET 4.5框架上使用C#。我正在尝试将NUnit支持插入到围绕MSUnit测试构建的自动测试系统中。作为系统的一部分,我需要使用Reflection在提供的.dll文件中找到标有TestAttribute
和TestCaseAttribute
的方法。目前,该系统已为NUnit版本3.2.1安装了NuGet软件包。
问题:有没有办法在使用旧版NUnit创建的测试中检测这些属性?例如,我有一些使用NUnit 2.6.4版创建的测试,但找不到相应的属性,因为系统正在从NUnit 3.2.1中查找属性。
以下是一段代码,用于检测所提供的.dll中标有TestFixtureAttribute
的测试类:
var testClasses = testAssembly
.SelectMany(a => a.GetTypes())
.Where(a => a.IsDefined(typeof(TestFixtureAttribute), false));
同样,此代码段在提供的.dll上找不到任何测试类,因为较旧的TestFixtureAttribute
与NUnit 3.2.1中的.complete()
不同。
我已经在nunit3-console.exe上成功运行了较旧的NUnit测试,因此发现测试是目前的一大障碍。
提前感谢您的帮助!
答案 0 :(得分:0)
这可能不会获得很多选票,但我的答案是“不要那样做!”无论如何,这不符合评论。 : - )
NUnit 3.x有一个用于运行测试的API。通过查找属性自己发现它们意味着每当有人(包括您自己的用户)添加标识测试的新属性时,您必须更新应用程序。这也意味着你必须弄清楚运行NUnit测试的语义,并复制NUnit如何做的每一个转折点。
这就是在“旧时代”中的表现 - 我的意思是在NUnit V2和MsTest中。创建NUnit 3的主要目标之一是提供一个API,以消除第三方运行者复制已经在NUnit中的逻辑的需要。
即使不等待未来打破您的实施,您也可以立即看到变更对其产生的影响。如果你处理Test和TestCase属性,那么...... * TestCaseSource * TestFixture * TestFixtureSource *价值观 *随机 * 范围 *组合 *顺序 *成对 (那是我的想法......我可能错过了一些东西)
OTOH,你可以限制你接触到的几个接口来进行测试。如果你正在编写需要集成到IDE中的东西,它会变得有点复杂,但无论你怎么做都会如此。
如果您决定使用API,请按照Rob的建议前往我们的论坛讨论出现的详细信息。