NUnit - 是否可以计算总测试,总时间,总测试?

问题描述 投票:0回答:1

我们可以计算NUnit中的总测试,总时间,总测试总数吗?

目前正在进行,其中测试通过Pass / Fail进行识别。我正在寻找是否有任何方法,给予计数;

            if (TestContext.CurrentContext.Result.Outcome.Status.ToString() == "Failed")
            {
                Log.Info("TestContext.Message = " + TestContext.CurrentContext.Result.Message);
                Log.Info("TestContext.StackTrace = " + TestContext.CurrentContext.Result.StackTrace);
            }
            else if (TestContext.CurrentContext.Result.Outcome.Status.ToString() == "Passed")
            {
                Log.Info("TestContext.Status = " + TestContext.CurrentContext.Result.Outcome.Status.ToString());
            }
            else
            {
                Log.Info("Undefined TestContext.Status = " + TestContext.CurrentContext.Result.Outcome.Status.ToString());
            } 
nunit nunit-3.0
1个回答
2
投票

正如您可能已经猜到的那样,TestContext在测试运行时才真正有用。在测试仍在运行时尝试获得最终结果有点像在您仍在使用房间时尝试获取最终的酒店账单。你得到的答案是暂时的,可能会有变化,例如,如果你吃早餐,从迷你吧拿东西,看电影等。

因此,最好等到测试结束后才能查看结果。对于单个测试用例,那将是[TearDown]方法。对于夹具或SetUpFixture,在[OneTimeTearDown]方法中。即便如此,如果这些方法碰巧抛出异常,所有赌注都会被取消!

对于总运行,我会使用引擎扩展而不是将代码放在我的测试中。你会写一个TestListener扩展。在其中,您只会在整个测试运行完成后采取措施。然后,测试的整个结果,包括所有计数都可用。这是“正确”的方法,但它也比你正在做的工作多一点。有关详细信息,请参阅文档

另一种方法是编写一个程序来处理测试结果XML文件并在那里获取信息。这样做的好处是可以作为一个单独的,简单的程序,而不需要您知道如何编写扩展。

最后,作为一种解决方法,您可以使用与您拥有的代码类似的代码。但是,它可能无法在以后的所有版本中使用,因为它使用内部结构的知识......

  1. 使用SetUpFixture方法创建装配级别的OneTimeTearDown。要成为汇编级别,它必须位于任何名称空间之外。
  2. 在OneTimeTearDown中,访问NUnit.Framework.Internal.TestExecutionContext.CurrentContext.CurrentResult。这个字段是TestResult,包含有关汇编结果的所有信息,包括通过的测试计数,失败等。
  3. 无论你做什么,都不要试图做任何改变TestResult的事情。如果你这样做,你可能会破坏一些东西。 :-)

祝好运!

© www.soinside.com 2019 - 2024. All rights reserved.