我想使用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() );
}
}
Run Code Online (Sandbox Code Playgroud)
结果变量说"没有TestFixture",虽然我知道它确实存在.实际上我的测试文件包含两个测试.
使用我发现的另一种方法,由以下代码汇总:
TestSuiteBuilder builder = new TestSuiteBuilder();
TestSuite testSuite = builder.Build( package );
// Run tests
TestResult result = testSuite.Run( new NullListener(), NUnit.Core.TestFilter.Empty );
Run Code Online (Sandbox Code Playgroud)
我看到只有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 );
}
}
Run Code Online (Sandbox Code Playgroud)
小智 13
以下代码有助于解决此问题
public static void Main()
{
CoreExtensions.Host.InitializeService();
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(),
TestFilter.Empty, false, LoggingThreshold.Off );
}
}
Run Code Online (Sandbox Code Playgroud)
小智 9
我在NUnit论坛上发布了我的问题,查理给了我一个关于如何找到问题的提示.我认为将它发布在这里可能是一个好主意,以便其他人可以防止花费大量时间.解决方案是首先使用以下行初始化核心服务:
CoreExtensions.Host.InitializeService();
Run Code Online (Sandbox Code Playgroud)
谢谢大家.