我能够在 VS 2010 中执行以下代码,但在 2012 年以下代码不起作用。我在这里做错了什么吗?
[TestMethod]
public void UTestMethod()
{
TestContext.BeginTimer("t1");
Thread.Sleep(100);
TestContext.EndTimer("t1");
}
它在方法 BeginTimer 上抛出 NoSupportedException。
最佳答案
根据以下 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");
这种方法适用于我安装的 VS2012,它允许我在单元测试中使用计时器并以单个用户身份运行它,而无需将其放入负载测试中。删除 VS 2012 中的功能并不是 Microsoft 的最佳决定。我发现在某些情况下,单元测试中的计时器在 VS 2013 中仍然无法工作,但有时它会在 2013 年中工作。无论如何,在 VS 2012 中,“单元测试计时器”始终被破坏,但上面的代码行提供了一个解决方法。
恕我直言,微软应该a)(首选)将计时器功能恢复到VS 2010中的方式,或者b)至少更新智能感知中的工具提示以声明计时器功能仅在负载测试中起作用,并更新IDE 显示波浪线警告,除非计时器与 $LoadTestUserContext 变量关联,如此处所示。与 LoadRunner 的 Vugen 等行业标准工具相比,VS 2012 中的变化给 Visual Studio 负载测试脚本带来了令人困惑和恼人的缺点。
关于unit-testing - Test.Context.BeginTimer 在 vs 212 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13640467/