【发布时间】:2010-05-09 17:52:51
【问题描述】:
我想使用 NUnit 在我的插件中运行单元测试,但它需要在我的应用程序的上下文中运行。为了解决这个问题,我试图开发一个运行 NUnit 的插件,它会在应用程序的上下文中执行我的测试。
我没有找到关于这个主题的具体文档,所以我在这里和那里挖掘了一段信息,并得出了以下代码(类似于我在 StackOverflow 中找到的代码):
public static void Main()
{
SimpleTestRunner runner = new SimpleTestRunner();
TestPackage package = new TestPackage( "Test" );
string loc = Assembly.GetExecutingAssembly().Location
package.Assemblies.Add( loc );
if( runner.Load(package) )
{
TestResult result = runner.Run( new NullListener() );
}
}
结果变量显示“没有 TestFixture”,尽管我确定它在那里。实际上我的测试文件包含两个测试。
使用我找到的另一种方法,总结如下代码:
TestSuiteBuilder builder = new TestSuiteBuilder();
TestSuite testSuite = builder.Build( package );
// Run tests
TestResult result = testSuite.Run( new NullListener(), NUnit.Core.TestFilter.Empty );
我看到只有 1 个测试的 nunit 数据结构,我遇到了同样的错误。
为了完整起见,我使用的是最新版本的 nunit,即 2.5.5.10112。
有人知道我错过了什么吗? 示例代码将不胜感激。 我的测试课是:
[TestFixture]
public class UnitTests
{
public UnitTests()
{
}
[Test]
public void TestEqual()
{
long a = 10;
long b = 10;
Assert.AreEqual( a, b );
}
[Test]
public void TestNotEqual()
{
long a = 10;
long b = 11;
Assert.AreNotEqual( a, b );
}
}
【问题讨论】:
-
你能构建一个小而完整的程序+插件并向我们展示代码,它可以复制问题吗?或者,至少,您可以发布您要测试的插件的类文件吗?
-
会不会是你的插件是用不同的 NUnit 版本编译的?我推测这不是您在问题中写的内容,但仍然......它会使属性类型不兼容。
-
如果我执行 Console.WriteLine(loc),它会打印控制台 exe 的名称。我试图加载类 dll,但我得到“访问被拒绝”。然后,当我执行 Console.WriteLine(result.ResultState) 时,它会打印“不确定”。你如何得到“没有文本夹具”的消息?另外,您如何检查它是否正在加载您的测试 dll。我可能在这里遗漏了一些明显的东西。