NUnit运行测试失败

时间:2018-09-28 17:29:13

标签: c# nunit

我的设置

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是我的测试包和运行程序包中的相同文件

1 个答案:

答案 0 :(得分:1)

您初始化CoreServices,但由于在非常低的级别上运行测试,所以没有使用它们。使用内部类(并非旨在用于一般用途)总是有风险的。但是,如果将它们拼凑在一起而不是像NUnit本身那样使用它们,则尤其危险。

如果您想以编程方式运行测试(这可能不是一个好主意,但这似乎是您想要做的),那么我建议您选择并使用一个NUnit运行器来处理细节为了你。根据您希望测试的运行方式和运行位置,从SimpleTestRUnner,RemoteTestRunner或TestDomain中选择。

TestDomain将在单独的AppDomain中运行它们,这通常是最简单和最安全的。 RemoteTestRunner将在当前的AppDomain中运行它们,从而重定向输出。 SimpleTestRunner是最低级别的运行程序(但仍比您正在做的工作要更高级别),并且仅在它们所在的位置运行测试。请注意,除非将所有测试文件,它们的引用和NUnit文件复制到同一目录中,否则不能在同一AppDomain(远程和简单)中运行测试。