如何在 VS2017 中分析单元测试
How can you profile unit tests in VS2017
VS2017 具有分析应用程序的能力。还有分析单元测试的能力吗?
是的。右键单击单元测试并选择 "Profile Test"。
但这只适用于企业版和专业版。
我是VS专业版,也打不开
可能需要VS企业版。
另请参阅
https://social.msdn.microsoft.com/Forums/en-US/49513731-23e6-4b65-acce-ed0a98e19b59/no-profile-test-option-in-context-menu-on-test-explorer-in-visual-studio-professional-2013?forum=vsunittest
和 https://visualstudio.microsoft.com/vs/compare/
根据 的其他回答,我在 VS2019 专业版中缺少分析单元测试的选项。
相反,我所做的是:
- 首先打开命令行 window,然后导航到单元测试 dll 的构建输出到的目录
- 运行
vstest.console.exe
告诉它要加载和测试的特定 dll 运行,例如vstest.console.exe MyProject.Test.dll /Tests:TestFooBar
,并检查它是否有效
- 现在,在 VS2019 分析器中执行相同的操作:
- 选择“可执行文件”的目标并找到 vstest.console.exe(提示:我的是 C:\Program Files (x86)\Microsoft Visual Studio19\Professional\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe
- 命令行选项如上
- 单元测试 DLL 所在的工作目录
- 启动分析会话,享受结果。
注意:您可能会发现大部分时间都被测试框架加载、静态构造函数、反射和 JITing 事情所支配,并且有太多噪音无法确定您的实际测试的哪些部分很慢。为了帮助,这个卑鄙的把戏非常有效:
[TestMethod]
public void TestFooBar()
{
for (int i = 0; i < 10000; i++) // extra iterations for profiling. Vary this number if 10k is too small
{
// your normal unit test which you'd only run once goes here
}
}
VS2017 具有分析应用程序的能力。还有分析单元测试的能力吗?
是的。右键单击单元测试并选择 "Profile Test"。
但这只适用于企业版和专业版。
我是VS专业版,也打不开
可能需要VS企业版。
另请参阅 https://social.msdn.microsoft.com/Forums/en-US/49513731-23e6-4b65-acce-ed0a98e19b59/no-profile-test-option-in-context-menu-on-test-explorer-in-visual-studio-professional-2013?forum=vsunittest 和 https://visualstudio.microsoft.com/vs/compare/
根据
相反,我所做的是:
- 首先打开命令行 window,然后导航到单元测试 dll 的构建输出到的目录
- 运行
vstest.console.exe
告诉它要加载和测试的特定 dll 运行,例如vstest.console.exe MyProject.Test.dll /Tests:TestFooBar
,并检查它是否有效 - 现在,在 VS2019 分析器中执行相同的操作:
- 选择“可执行文件”的目标并找到 vstest.console.exe(提示:我的是 C:\Program Files (x86)\Microsoft Visual Studio19\Professional\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe
- 命令行选项如上
- 单元测试 DLL 所在的工作目录
- 启动分析会话,享受结果。
注意:您可能会发现大部分时间都被测试框架加载、静态构造函数、反射和 JITing 事情所支配,并且有太多噪音无法确定您的实际测试的哪些部分很慢。为了帮助,这个卑鄙的把戏非常有效:
[TestMethod]
public void TestFooBar()
{
for (int i = 0; i < 10000; i++) // extra iterations for profiling. Vary this number if 10k is too small
{
// your normal unit test which you'd only run once goes here
}
}