如何在Visual Studio 2010中精确计算测试时间

sau*_*aus 5 unit-testing mstest visual-studio-2010

我为我的项目提供了一套单元测试,我使用visual studio test runner运行.我想知道测试运行多长时间.测试运行详细信息屏幕显示运行的开始和结束时间,但仅显示最接近的秒数.我的测试套件目前只需不到一秒的时间就可以完成,所以我不知道我的50套测试是否需要<0.1秒(好!)或最多1秒(不好!).

有没有办法实现这种精度水平?

Eri*_*ich 8

在根解决方案目录中,测试运行后会有一个名为Test Results的文件夹.如果你查看那里,每次运行都会吐出一个.TRX文件,其中包含测试运行的时间戳作为其名称的一部分.打开此文件,您将看到它是一个XML文件,其中包含一系列有关测试运行的难以阅读的信息.如果您查找XML节点"UnitTestResult",则每个节点都将具有一个名为"duration"的属性.这将告诉您每个测试运行多长时间(假设测试已运行).

我对此有很多经验,因为我编写了一个开源实用程序,它接受这些TRX文件,解析它们,并生成结果的HTML报告.它向您展示的一件事是测试持续时间,对于单个测试,聚合测试类以及整个测试运行.

为了避免这个作为我的工具的插件,我不会发布链接,除非有人好奇.但是,足以说明,您可以从TRX文件获得测试的执行时间,无需调试跟踪或控制台或编辑测试代码.

编辑:精度高得离谱.对于单个单元测试,示例条目是00:00:00.0015890.

  • 刚刚发现,在Visual Studio 2010测试结果窗口中,您可以添加一个显示此值的"持续时间"列.我可能会更喜欢你的方式.:)你知道这个值是否隐藏在某个地方的TestContext中? (2认同)

Ern*_*ieL 6

让所有测试类继承自进行测量的基本测试类.

在一般情况下,您需要将输出消息传递给更有用的东西(如记录器).

[TestClass]
public abstract class TestClassBase2
{
    protected TestContext testContextInstance;

    public TestContext TestContext
    {
        get { return testContextInstance; }
        set { testContextInstance = value; }
    }

    protected System.Diagnostics.Stopwatch _stopWatch;

    [TestInitialize]
    public void TestInitializeBase()
    {
        _stopWatch = System.Diagnostics.Stopwatch.StartNew();
    }


    [TestCleanup]
    public void TestCleanupBase()
    {
        System.Diagnostics.Debug.WriteLine("Done - Total Test time: {0} ms - {1}",
                                            _stopWatch.ElapsedMilliseconds, TestContext.TestName);
    }
}

[TestClass]
public class TempTests : TestClassBase2
{
    [TestMethod]
    public void TempTest()
    {
        // outputs: 
        // Done - Total Test time: 3 ms - TempTest
    }
}
Run Code Online (Sandbox Code Playgroud)