我想使用NUnit在我的插件中运行单元测试,但它需要在我的应用程序的上下文中运行。为了解决这个问题,我试图开发一个运行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);
我看到NUnit的数据结构,只有1测试和我有同样的错误。
为了完整起见,我使用了最新版本的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);
}
}
你可以建立一个小的,但是完整的程序+插件,并告诉我们的代码,即复制的问题?或者,至少,你可以发布你想要测试的插件的类文件吗? – 2010-05-09 18:15:25
难道你的插件是用不同的NUnit版本编译的?我认为这不是来自您在问题中所写的内容,而是......它会使属性类型不兼容。 – 2010-05-09 18:19:44
如果我使用Console.WriteLine(loc),它将打印控制台exe的名称。我试图加载类的DLL,我得到了“访问被拒绝”。然后当我做Console.WriteLine(result.ResultState)它打印“不确定”。你如何得到“没有textfixture”的消息?另外你如何检查它是否事实上加载你的测试DLL。我可能会忽略这里显而易见的东西。 – 2010-05-09 20:24:45