我的设置
CoreExtensions.Host.InitializeService();
package = new TestPackage(pathToTestDll);
builder = new TestSuiteBuilder();
suite = builder.Build(package);
运行(请注意,测试是从套件中检索到的NUnitTestMethods的有效列表
foreach (NUnitTestMethod t in tests)
{
try
{
var res = t.RunTest();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
我将其作为异常堆栈:
System.Reflection.RuntimeMethodInfo.CheckConsistency(对象目标)在System.Reflection.RuntimeMethodInfo.InvokeArgumentsCheck(对象obj,BindingFlags invokeAttr,活页夹活页夹,Object []参数,CultureInfo文化)在System.Reflection.RuntimeMethodInfo.Invoke(在System.Reflection.MethodBase.Invoke处的对象obj,BindingFlags invokeAttr,活页夹活页夹,Object []参数,CultureInfo文化(在NUnit.Core.Reflect.InvokeMethod(ObjectInfo,Object []参数))(MethodInfo方法,对象夹具,对象) [] args)位于NUnit.Core.TestMethod.RunTestMethod()位于NUnit.Core.TestMethod.RunTestCase(TestResult testResult)
请注意,t.RunTest();不会失败,而是测试只会在运行中失败并设置HasError标志...
nunit.core和nunit.core.interfaces是我的测试包和运行程序包中的相同文件
答案 0 :(得分:1)
您初始化CoreServices,但由于在非常低的级别上运行测试,所以没有使用它们。使用内部类(并非旨在用于一般用途)总是有风险的。但是,如果将它们拼凑在一起而不是像NUnit本身那样使用它们,则尤其危险。
如果您想以编程方式运行测试(这可能不是一个好主意,但这似乎是您想要做的),那么我建议您选择并使用一个NUnit运行器来处理细节为了你。根据您希望测试的运行方式和运行位置,从SimpleTestRUnner,RemoteTestRunner或TestDomain中选择。
TestDomain将在单独的AppDomain中运行它们,这通常是最简单和最安全的。 RemoteTestRunner将在当前的AppDomain中运行它们,从而重定向输出。 SimpleTestRunner是最低级别的运行程序(但仍比您正在做的工作要更高级别),并且仅在它们所在的位置运行测试。请注意,除非将所有测试文件,它们的引用和NUnit文件复制到同一目录中,否则不能在同一AppDomain(远程和简单)中运行测试。