System.Diagnostics.Debugger.Break(); // this DB call has not been mocked
我想将这些代码放置在I / O调用站点的代码中,以使单元测试开发人员知道何时他们没有正确模拟调用,但是我不想造成新的问题。
在编译为Release时调用Debugger.Break()有什么影响吗?
在执行调试版本而不进行调试时是否有影响?
答案 0 :(得分:4)
不幸的是,确实如此。
要解决您的问题:
蒂姆·施密特有一个很好的建议。如果要将Debugger.Break限制为仅调试版本,则可以使用Conditional Compilation。
#if DEBUG
Debugger.Break();
#endif
如果没有附加调试器,则它将尝试附加调试器,或根据要定位的.Net Framework版本将消息发送到Windows错误报告(WER)子系统。
如果未附加调试器,则会询问用户是否要附加调试器。
...
从.NET Framework 4开始,运行时不再严格控制为Break方法启动调试器的过程,而是向Windows错误报告(WER)子系统报告错误。
答案 1 :(得分:3)
正如评论和@AndyJ的答案所解释的,如果没有调试器附加到进程中,则程序将崩溃。
您可能想要的是在运行时调用optimizer=rmsprop
之前检查调试器是否已连接。为此,有一个API属性,System.Diagnostics.Debugger.IsAttached