我能够在 VS 2010 中执行以下代码,但在 2012 年以下代码不起作用。我在这里做错什么了吗。
[TestMethod]
public void UTestMethod()
{
TestContext.BeginTimer("t1");
Thread.Sleep(100);
TestContext.EndTimer("t1");
}
它在 BeginTimer 方法上抛出 NoSupportedException。
我能够在 VS 2010 中执行以下代码,但在 2012 年以下代码不起作用。我在这里做错什么了吗。
[TestMethod]
public void UTestMethod()
{
TestContext.BeginTimer("t1");
Thread.Sleep(100);
TestContext.EndTimer("t1");
}
它在 BeginTimer 方法上抛出 NoSupportedException。
根据以下微软博客,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 负载测试脚本具有令人困惑和恼人的劣势。
TestContext.BeginTimer 的主要用途是在负载测试中。但是我认为您是在标准单元测试中运行它。所以在这种情况下,是的,这是一个错误。
此处的解决方法是在运行测试时使用 .testsettings 文件,以允许您获得熟悉的功能。
希望有帮助