我可以在运行 VS 单元测试时进行调试吗?
Posted
技术标签:
【中文标题】我可以在运行 VS 单元测试时进行调试吗?【英文标题】:Can I debug while running a VS Unit Test? 【发布时间】:2011-07-09 05:11:14 【问题描述】:我想对使用自定义事件的用户组件进行单元测试。当不使用 VS 单元测试框架 debug.assert 成功时,当使用 VS 单元测试框架做同样的事情时,断言失败这是不合逻辑的,所以我想在使用 VS 框架进行单元测试时进行调试。但似乎我不能,因为代码永远不会在我设置的调试点暂停。
那么有没有办法在这种情况下强制它在调试点暂停?
更新:我的意思不是在测试项目本身中,而是在运行测试项目时的目标项目中。
【问题讨论】:
【参考方案1】:是的,使用 Visual Studio 测试项目,您可以设置断点并单步执行您的代码。
请务必使用调试菜单 -- 测试 -> 调试 -> 当前上下文中的测试来运行您的测试。 对于任何给定的测试类或测试方法,使用键盘快捷键 Ctrl-R Ctrl-T。
当您的光标位于方法中时(测试方法或测试所涵盖的代码),它将在该方法中的任何断点或代码中任何位置的任何断点处中断执行路径。如果您的光标在类上,或者在测试方法之间,它将运行类中的所有测试。和上面一样,这里会打断点。
【讨论】:
我忘了我的意思不是在测试项目中,而是在目标项目中 @user:是的,任何断点都会被命中,无论是在测试方法中,还是在下游正在测试的代码中。 只是添加到@user 的评论中,如果您调试单元测试,您将能够停止和调试任何代码、测试或测试代码,只要您拥有测试代码源或调试器信息,因此您将无法跳转到没有符号文件的引用 dll 没有具体设置,因为在我的设置中通过执行但从未击中故障? 确保您不在发布版本中。【参考方案2】:P. Campbell 的答案并不完全正确。如果您开始调试项目(例如 WCF 服务站点),则无法启动任何单元测试,无论是否处于调试模式。执行此操作的选项在 Visual Studio 2012 中只是灰显。
这意味着您根本无法从单元测试中调试进程外代码。您只能调试单元测试在进程中直接调用的代码。
这是他们现在需要修复的 VS2012 中的一个主要问题。
【讨论】:
我想到你可以使用另一个 Visual Studio 实例来调试你的进程外代码。 @ChrisBordeman 这是唯一的方法。打开另一个实例,从那里执行测试并在调试另一个项目期间设置断点。来吧VS,你比那更厉害! 使用两个 VS 实例是一个 PITA,但可以。替代方法:在 UT 中设置一个断点,运行到它,然后执行 Debug->Attach to process。它工作得很好。不知道为什么它会通过 UI 受到限制。 就我而言,我想在运行测试时以调试模式启动一个 web api 项目。使用@Borv 建议的方法,通过在测试中放置断点而不是运行调试-> 附加,我右键单击Web api 项目并运行调试-> 启动新实例。这在 VS 2015 中对我有用。 你们中的许多人会不同意,但这就是为什么我认为 TDD 是浪费时间的原因,在发布代码时你知道你是对的还是错的,但是对于资深人士来说,我的代码正在运行,这很好,但是任何人都想到了这一点,您如何确定测试代码的逻辑行为是正确的【参考方案3】:在 VS2015 中,选择:
测试->调试->所有测试
或者您可以在编辑器中突出显示特定测试并选择
测试->调试->选定的测试
【讨论】:
这也适用于 VS2017。【参考方案4】:在测试资源管理器下 -> 右键单击要调试的特定测试用例 -> 从上下文菜单中单击调试选定的测试用例选项。
【讨论】:
以上是关于我可以在运行 VS 单元测试时进行调试吗?的主要内容,如果未能解决你的问题,请参考以下文章