从NUnit TestContext检索测试持续时间

时间:2015-12-01 22:23:08

标签: c# unit-testing nunit

我希望能够在我的测试代码中访问测试的持续时间。我一直在看NUnit中的TestContext类,但是当我发现信息与#34; FullName"相关时,我无法确定在何处访问测试的持续时间。

[TearDown]
public void TearDown()
{
    Console.WriteLine(TestContext.CurrentContext.Test.FullName); 
}

除了测试的全名,我可以访问Properties字典,但在所有情况下,只有值是" _CATEGORIES"条目。

我如何完成我想做的事?

谢谢: - )

1 个答案:

答案 0 :(得分:7)

无法从NUnit TestContext获取此信息,因为NUnit并未在此处提供此类信息。基本上,单元测试应该很快,并告诉你某些部件是否坏了,但不要将它们用作时间注册系统。

我的问题是为什么在单元测试中需要这些信息?

NUnit为测试提供了定义时间限制的属性TimeoutMaxTime。如果测试用例的运行时间超过指定的时间,则将使用这两个属性来说明此失败。如果定义了Timeout属性,则测试将尽快中断。如果定义了MaxTime属性,则不会中断测试用例。

您还可以检查包含测试结果的文件 TestResult.xml,并找到代表执行时间的属性(称为time)。如果您的老板想要一些好看的东西,可以使用特殊工具nunit-results生成HTML报告。

您是否仍想知道代码中的执行时间?从这个类继承您的测试:

[TestFixture]
public abstract class BaseTestClass
{
    private Stopwatch _stopWatch;

    [SetUp]
    public void Init()
    {
        _stopWatch = Stopwatch.StartNew();   
    }

    [TearDown]
    public void Cleanup()
    {
        _stopWatch.Stop();
        Debug.WriteLine("Excution time for {0} - {1} ms",
            TestContext.CurrentContext.Test.Name,
            _stopWatch.ElapsedMilliseconds);
        // ... add your code here
    }
}
相关问题