debugging 如何将调试器附加到命令行mstest

rlcwz9us  于 2023-08-06  发布在  其他
关注(0)|答案(3)|浏览(119)

我有一个使用mstest的单元测试套件,我可以在visual studio中很好地运行它,但是当我的部署脚本试图使用命令行调用mstest来运行测试时,它会在测试过程中冻结一半的时间。这可能是测试中的一个问题,但由于无法在调试器中重现该问题,因此无法找到该问题。
到目前为止,我还无法附加mstest进程来调试这个问题,因为当我附加和暂停时,我在visual studio中看不到任何东西(没有列出线程,没有已知代码)。它使用appdomains的方式是否有什么奇怪之处,从而阻止了轻松地附加到它?有没有其他好的方法来尝试和排除故障,有没有可能从测试内部执行与控制台WriteLine等效的操作,以便mstest将在其运行的控制台窗口中显示它?

zlwx9yxi

zlwx9yxi1#

两个选择
1.在IDE中取消选中Test -> Test Settings -> Keep Test execution engine running。
或者是
1.要使用命令行:
使用/noisolation开关运行mstest。它将直接执行测试,而不是生成辅助进程。
Mixed:自动将VS调试器附加到命令行mstest.exe:
我使用以下内容为我的测试项目配置Debug选项卡:
启动外部程序:C:\Program Files(x86)\Microsoft Visual Studio 14.0\Common7\IDE\MSTest.exe
命令行参数:/noisolation /testcontainer:MyProjectName.dll

kxeu7u2r

kxeu7u2r2#

查看Process Explorer中的进程树后,MSTest.exe正在启动一个名为QTAgent32_40.exe的子进程,我可以附加到该进程并关闭Just my code以便调试我的测试。
结果发现,它实际上是在我创建的一个使用MethodImplOptions.Synchronized的模拟对象中死锁

gpnt7bae

gpnt7bae3#

以下是我对vstest.console工具的建议:
1.在测试文件的顶部添加新的测试方法,这样vstest.console工具会首先执行此测试:

[TestMethod]
public void DebugAttachToProcessTimeout()
{
    Console.ReadLine();
}

字符串
1.启动Vstest.console.exe,并将相应的程序集作为参数。工具将尝试检查第一个测试并等待用户输入。
1.切换到Visual Studio并转到Debug -> Attach to process(CTRL+ALT+P)。然后选择“Vstest.console.exe”并单击“附加”。
1.现在您可以返回到控制台并按回车键。工具将继续使用附加的visual studio执行测试。

相关问题