Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 2010 如何在VisualStudio2010中精确计时测试运行_Visual Studio 2010_Unit Testing_Mstest - Fatal编程技术网

Visual studio 2010 如何在VisualStudio2010中精确计时测试运行

Visual studio 2010 如何在VisualStudio2010中精确计时测试运行,visual-studio-2010,unit-testing,mstest,Visual Studio 2010,Unit Testing,Mstest,我有一套用于我的项目的单元测试,我使用VisualStudio测试运行程序运行这些测试。我想知道测试运行需要多长时间。test run details(测试运行详细信息)屏幕显示运行的开始和结束时间,但仅显示最接近的秒数。目前,我的测试套件需要不到一秒的时间才能完成,因此我无法判断我的50个测试套件需要

我有一套用于我的项目的单元测试,我使用VisualStudio测试运行程序运行这些测试。我想知道测试运行需要多长时间。test run details(测试运行详细信息)屏幕显示运行的开始和结束时间,但仅显示最接近的秒数。目前,我的测试套件需要不到一秒的时间才能完成,因此我无法判断我的50个测试套件需要<0.1秒(好!)还是最多1秒(坏!)


是否有任何方法可以启用此精度级别?

您可以始终多次运行单元测试,然后将总时间除以运行它们的次数。不过,这基本上是一个平均值,因此如果您正在寻找低点或高点,那么这并不是最好的做法。

让所有测试类都从执行度量的基本测试类继承

在一般情况下,您需要通过管道将输出消息传输到更有用的东西(如记录器)


在根解决方案目录中,测试运行后有一个名为testresults的文件夹。如果您查看一下,每次运行都会抛出一个.TRX文件,其中测试运行的时间戳是其名称的一部分。打开这个文件,您将看到它是一个XML文件,包含大量关于测试运行的难以读取的信息。如果查找XML节点“UnitTestResult”,则每个节点都有一个名为“duration”的属性。这将告诉您每个测试运行所需的时间(假设测试已运行)

在编写一个开源实用程序时,我对此有很好的经验,该实用程序接收这些TRX文件,解析它们,并生成结果的HTML报告。它向您展示的内容之一是测试持续时间,对于单个测试、聚合的测试类以及作为一个整体的测试运行

除非有人好奇,否则我不会发布链接,以免它成为我工具的插头。但是,可以说,您可以从TRX文件中获得测试的执行时间,而无需调试跟踪、控制台或编辑测试代码


编辑:而且精度高得离谱。对于单个单元测试,示例条目为00:00:00.0015890。

在一次测试运行期间,测试必须运行多次-如果不在每个测试方法中添加循环,我看不到这样做的方法,这是不理想的。有没有一种方法可以多次将测试添加到测试运行中?刚刚发现,在Visual Studio 2010测试结果窗口中,可以添加一个显示此值的“持续时间”列。我可能更喜欢你的方式你知道这个值是否隐藏在TestContext中的某个地方吗?我能想象它在TestContext中的唯一位置是在实例属性“properties”中建立索引,但我承认我对在代码中使用TestContext知之甚少。我通常不使用它,因为我不使用MS Test进行集成测试。(并不是说这是人们可能会使用它的唯一原因——我只是从来都不需要它)。顺便说一句,结果窗口中的可选列捕捉得很好。我很早以前就定制了它,从那以后就再也没有看过它了,所以我从来没有使用过那个专栏。我只是设置了一个断点并深入到测试上下文中。它包含一个私有的m_currentResult。我看不到一种公开的方式来获取代码中的持续时间。似乎从结果文件中解析它是获得值的唯一方法(没有黑客攻击)。@ChiefTwoPencils哇,好几年没想过这个了。我在6年前把它放到Sourceforge上:
[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
    }
}