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

时间:2014-06-10 16:26:46

标签: c# debugging mstest visual-studio-debugging

我有一个使用mstest的单元测试套件,我可以在visual studio中运行,但是当我的部署脚本尝试使用命令行调用mstest运行测试时,它会在测试的一半时间内冻结。这可能是测试中的问题,但是无法在调试器中重现问题,我一直无法找到问题。

到目前为止,我无法附加mstest进程以便能够调试问题,因为当我附加和暂停时,我在visual studio中看不到任何内容(没有列出线程,没有已知代码)。关于它如何使用appdomains以防止轻易附加到它,有什么奇怪的吗?尝试和排除故障的任何其他好方法是,甚至可以从测试内部执行等效的Console WriteLine,以便mstest将在运行的控制台窗口中显示它吗?

3 个答案:

答案 0 :(得分:5)

两个选项。

  1. 在IDE中取消选中Test - >测试设置 - >保持测试执行引擎运行。
    1. 使用命令行:
    2. 使用/ noisolation开关运行mstest。它将直接执行测试,而不是产生辅助进程。

      混合:自动将VS调试器连接到命令行mstest.exe:

      我使用以下命令为我的测试项目配置Debug选项卡:

      启动外部程序:C:\ Program Files(x86)\ Microsoft Visual Studio 14.0 \ Common7 \ IDE \ MSTest.exe

      命令行参数:/ noisolation /testcontainer:MyProjectName.dll

答案 1 :(得分:3)

在Process Explorer中查看进程树后,MSTest.exe启动了一个名为QTAgent32_40.exe的子进程,我能够附加到该进程并关闭Just my code以便我可以调试我的测试

原来它在我创建的使用MethodImplOptions.Synchronized

的模拟对象中实际上是死锁

答案 2 :(得分:0)

以下是我对vstest.console工具的建议:

  1. 在测试文件的底部添加新的测试方法,因此该测试将首先在 vstest.console 工具中执行:

    [TestMethod]
    public void DebugAttachToProcessTimeout()
    {
        Console.ReadLine();
    }
    
  2. 以适当的程序集作为参数启动 Vstest.console.exe 。工具将尝试检查第一个测试并等待用户的输入。
  3. 切换到Visual Studio并转到Debug - >附加到进程(CTRL + ALT + P)。然后选择' Vstest.console.exe'然后点击'附加'。
  4. 现在您可以返回控制台并按Enter键。工具将继续使用附带的visual studio执行测试。