在VS 2008中调试单元测试用例

5

我正在尝试在Visual Studio 2008中调试我的一些单元测试,但是发现断点似乎没有停止执行。

我有点认为这很简单,只需要设置断点,然后执行“Test | Debug | Tests in current context”...但实际上它从未命中我设置的断点。

我是做错了什么还是这个功能出了问题?

谢谢, Brandon


这是微软测试框架还是你使用类似 NUnit 的其他工具? - Robert Koritnik
我通常只运行所有测试,然后装配被加载并启用断点。也许你的装配由于某种原因无法加载(假设使用 MS 框架)。 - AndersK
5个回答

2

我曾经遇到过同样的问题,直到我手动附加到aspnet_wp.exe进程并点击“Debug Tests”按钮后,我的断点才最终被触发。


当我尝试附加它时,aspnet_wp.exe没有显示出来。有任何想法为什么? - ford prefect

1
在我的情况下,System.Diagnostics.Debugger.Break() 在测试方法中无法停止。
[TestClass]
public class ContactListTest
{
    #region "Constants"
    public const string COVERAGE = "CoverageService";

    public const string CompanyList = "CompanyList";
    public const string ContactList = "ContactList";
    #endregion

    [TestMethod]
    public void GetContactListTest()
    {
        System.Diagnostics.Debugger.Break();

        var ex = new ServiceFilterExpression(COVERAGE);
        ex.Expression = new OpBeginsWith("Type", ContactList);
        var result = ex.FetchData();

   } 
}

0

微软官方workaround/kludge/zomg-I-can't-believe-they-can't-be-arsed-to-provide-this-after-4-years为MSTEST在VS2010、VS2008和VS2005中的解决方法是,在你想要从中开始调试的单元测试中添加System.Diagnostics.Debugger.Break()。这适用于所有由单元测试项目引用调试符号的项目。

.NET运行时将提示您转储到调试模式(或关闭执行单元测试程序,或忽略调试行),并(有时)允许您使用启动单元测试的Visual Studio实例来进行调试。您始终可以从新的VS实例进行调试。一旦您触发了那个System.Diagnostics.Debugger.Break()行,所有其他断点都将处于活动状态并被触发(假设它们在执行堆栈中)。


0
请检查以下内容:
  • 测试是否标记为[TestClass][TestMethod]
  • 您是在运行Debug还是Release模式构建?(除非确实有区别)Debug更好。
  • 您是使用优化编译还是不使用?不使用更好。
  • 尝试运行解决方案中的所有测试,以检查是否触发了断点。
  • 最后,也许您有错误,这就是为什么没有触发代码的原因?

0
如果您使用nUnit,则需要执行以下操作: 用要测试的DLL启动Nunit。 然后在Visual Studio中转到 "工具" - > "附加到进程"
选择您的nunit进程,然后单击“附加”,它将停在您所有断点处。
玩得愉快 :-)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接