【问题标题】:NUnit running test(s) is failingNUnit 运行测试失败
【发布时间】:2019-03-04 17:42:57
【问题描述】:

我的设置

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(Object target) 在 System.Reflection.RuntimeMethodInfo.InvokeArgumentsCheck(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfoculture) 在 System.Reflection.RuntimeMethodInfo.Invoke( System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters) 在 NUnit.Core.Reflect.InvokeMethod(MethodInfo method, Object fixture, Object [] args) 在 NUnit.Core.TestMethod.RunTestMethod() 在 NUnit.Core.TestMethod.RunTestCase(TestResult testResult)

注意 t.RunTest();不会失败,而是测试只是在运行时失败并且设置了 HasError 标志...

我的测试包和运行器包中的 nunit.core 和 nunit.core.interfaces 是相同的文件

【问题讨论】:

    标签: c# nunit


    【解决方案1】:

    您初始化了 CoreServices 但没有使用它们,因为您在非常低的级别运行测试。使用不用于一般用途的内部类总是有风险的。但是,如果您将它们零碎地放在一起而不是像 NUnit 本身那样使用它们,则风险尤其大。

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

    TestDomain 将在单独的 AppDomain 中运行它们,这通常是最简单和最安全的。 RemoteTestRunner 将在当前 AppDomain 中运行它们,重定向输出。 SimpleTestRunner 是最低级别的运行程序(但仍然方式高于您正在执行的操作)并且只是在它们所在的位置运行测试。请注意,您不能在同一个 AppDomain(远程和简单)中运行测试,除非您已将所有测试文件、它们的引用和 NUnit 文件复制到同一目录中。

    【讨论】:

    • 我能否通过 runner.Run(new NullListener(),myTest.TestName) 简单地运行 SimpleTestRunner(在实例化和加载我的包之后)?还有什么方法可以设置引用/nunit 文件的引用路径而不是用它们填充工作目录?
    • 1. Run 的第二个参数必须是一个测试过滤器。在您的情况下, SimpleNamefFilter 可能适合。
    • 2.不,如果您使用 SimpleTestRunner,则不会。如果您希望测试位于与 nunit 文件不同的位置,则需要在单独的 AppDomain 中运行。这就是 NUnit 的做法。 IIRC(这是您正在使用的非常旧的代码)如果您创建 AppDomain,RemoteTestRunner 将允许您这样做。 TestDomain 会帮你搞定,比较简单。
    • 顺便说一句,你曾经说过为什么你要这样做,而我从来没有问过。然而,当 NUnit 乐于为您运行测试时,编写自己的运行程序似乎有点疯狂。 :-)
    • 编写一个应用程序来搜索/运行基于方法属性而不是类别和方法签名的nunit测试(IE需要在描述属性中找到关键字)。在可以创建自定义列表之后,运行测试需要能够通过另一个包含 ID 的自定义属性将结果导出到 TestRail。自动化 QA 流程。 1200 次测试。感谢您的回答,虽然它解决了我的问题
    猜你喜欢
    • 1970-01-01
    • 2020-09-19
    • 2021-10-11
    • 1970-01-01
    • 2012-03-25
    • 2011-11-14
    • 1970-01-01
    • 2014-11-02
    • 1970-01-01
    相关资源
    最近更新 更多