【发布时间】:2018-02-05 10:42:39
【问题描述】:
这个问题与我的单元测试程序崩溃但我不知道是哪个单元测试的问题有关。
我意识到这个问题与How can I find out which test method in a batch of test methods fails to run? 重复,但无论如何我都需要尝试:
我正在运行一些单元测试(其中大约 118 个),但其中一个似乎使 Visual Studio 单元测试环境崩溃。这是我在“输出”窗口的“测试”选项卡中看到的:
[5/02/2018 11:13:18 Informational] ------ Run test started ------
[5/02/2018 11:13:38 Error] The active Test Run was aborted because the execution process exited unexpectedly. The test execution process crashed while running the tests. To investigate further, open file:///C:/Users/DominiqueDS/AppData/Local/CrashDumps/vstest.executionengine.x86.exe.19136.dmp file in Visual Studio and choose "Debug in mixed mode".
[5/02/2018 11:13:38 Informational] ========== Run test finished: 65 run (0:00:19,6926824) ==========
我拥有该转储文件的原因要归功于我的 Windows 配置,它会在应用程序崩溃的情况下自动创建此类转储文件。 (此配置的过程可在this URL 下找到)
检查转储文件为我提供了有关测试失败的更多信息:我有预感在哪里可以找到它,在另一个线程中,我找到了一个函数,调用了一个似乎包含名称的 method我正在运行的单元测试。
虽然我知道哪个测试失败了,但它是基于预感和我什至不应该生成的转储文件,所以我正在寻找另一种解决方案:
在“c:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Auxiliary\VS\UnitTest\include\CppUnitTest.h”文件中的函数TEST_METHOD中,我尝试过添加以下行:
cout << "Test : ";\
cout << methodName;\
cout << "\n";\
我希望这会显示我想要运行的每个测试,但我收到错误消息,指出这是错误的(似乎也不允许使用 std::cout 和 OutputDebugString() 函数)。
因此我的问题是:如果我的一个单元测试使我的测试环境崩溃,是否有人知道一种方法来找出答案,我如何才能找出这是哪个测试,而无需生成和调试 Visual Studio 转储文件?
供您参考:查看“测试资源管理器”没有帮助:我有一个禁用测试列表、一个成功测试列表以及一些未完成测试的列表,而我的失败测试不是第一个“未完成”的那些。
【问题讨论】:
-
我猜你在调试模式下运行测试并逐步完成它?
-
@UKMonkey:不,我在“Release”模式下运行测试:看到大量测试我无法一一运行,并且在“Debug”模式下运行它们会变慢过程太多了。除此之外,崩溃并不总是发生。
-
“虽然我知道哪个测试失败了”对不起,为什么不能调试呢?
-
我正在使用一组应用程序,其中一个(防御)正在验证是否有任何应用程序失败或崩溃。我使用的 Windows 范围的配置会干扰这种防御。因此,我想找到一种方法来识别没有它的崩溃原因。供您参考:我不是因为当前需要而问这个问题(我可以调试应用程序并查看发生了什么),但是如果每次出现此类问题时我都需要重新配置我的电脑,我会会浪费很多时间,所以我想找到一种未来安全的方法来检测当前正在运行的测试。
标签: c++ visual-studio unit-testing crash visual-studio-2017