Test.Context.BeginTimer在vs 212中不起作用

时间:2012-11-30 07:00:16

标签: unit-testing visual-studio-2012

我能够在VS 2010中执行以下代码,但在2012年,以下代码无效。我在这里做错了吗。

[TestMethod]
public void UTestMethod()
{

    TestContext.BeginTimer("t1");
    Thread.Sleep(100);
    TestContext.EndTimer("t1");
}

它会在方法BeginTimer上抛出NoSupportedException。

2 个答案:

答案 0 :(得分:1)

根据以下Microsoft博客http://blogs.msdn.com/b/geoffgr/archive/2014/08/05/adding-timers-to-coded-ui-tests-running-in-load-tests.aspx,从Visual Stuido 2012中删除了在单元测试中使用计时器的功能。该博客指出,当单元测试放在负载测试中时,计时器仍然有效但是,独立的,单元测试将抛出System.NotSupportedException。该博客指出,解决方法是在beginTimer()调用之前使用以下代码行:

if(TestContext.Properties.Contains(" $ LoadTestUserContext"))//作为加载运行 testContextInstance.BeginTimer(" MyTimerName&#34);

这种方法正在我的VS2012安装上工作,并允许我在我的单元测试中使用定时器并将其作为单个用户运行而不将其置于负载测试中。删除VS 2012中的功能并非Microsoft的最佳决策。我发现了一些情况,单元测试中的计时器在VS 2013中仍然不起作用,但有时它会在2013年起作用。无论如何,在VS 2012中,"单元测试计时器"一直被打破,但上面的代码行提供了一种解决方法。

恕我直言,微软应该a)(首选)将计时器功能恢复到VS 2010中的方式或b)至少更新智能感知中的工具提示,说明计时器功能仅适用于负载测试,并更新IDE显示一个波浪形警告,除非计时器与$ LoadTestUserContext变量相关联,如此处所示。与LoadRunner的Vugen等行业标准工具相比,VS 2012中的更改为Visual Studio负载测试脚本带来了令人困惑和恼人的缺点。

答案 1 :(得分:0)

TestContext.BeginTimer的主要用途是在加载测试中。但是我认为你是在标准单元测试中运行它。所以在这种情况下,这是一个错误。

此处的解决方法是在运行测试时使用.testsettings文件,以便您获得熟悉的功能。

希望有所帮助