关闭即将发布的Debug Assertion

时间:2015-08-19 16:51:04

标签: c# debugging nunit assertion

我正在使用NUnit测试调试DLL,并且非常讨厌每个testrun都会出现大量的Debug Assertions。

所以我编写了一个工具来轮询新的Debug Assertion。该工具每隔x毫秒迭代到​​所有窗口,并检查标题是否是可能的Debug Assertion窗口标题集合之一。

在伪代码中,它看起来像这样:

firsts=[]
for i in range(dstart.month, datenow.month+1):
    firsts.append(datetime.datetime(2015,i,1)) 
plt.xticks(firsts)

代码行void main() { var thread = new Thread(ThreadMethod); thread.Start(); } private void ThreadMethod() { while(true) { foreach(var title in possibleWindowTitles) { IntPtr windowHandle = FindWindowHandle(title); if(windowHandle != IntPtr.Zero) { SetToForeground(windowHandle); SendKeys.SendWait("%I); } } } } SendKeys.SendWait("%I")的键组合发送到窗口,这是“继续”按钮的组合键。

我的问题是:
有更好的选择吗?类似的东西:

  • 新窗口出现时的事件
  • 关闭窗口的更好方法(ALT + I中的CloseWindow方法对我没有用 - 没有异常,但没有任何反应)
  • User32.dll解决方法的更好解决方案
  • 最好的方法是抑制断言 - 这有可能吗?

我的方式有效,但我认为我的解决方案非常容易出错。所以,我有一个有好主意的人

1 个答案:

答案 0 :(得分:1)

您可以配置对话框的行为。这是DefaultTraceListener提供的行为,可以在代码中或通过配置文件进行配置。 Debug.Assert的文档提到了这一点。

在配置文件中,您可以像这样关闭UI:

<configuration>
  <system.diagnostics>
    <assert assertuienabled="false" logfilename="c:\myFile.log" />
  </system.diagnostics>
</configuration>

您也可以通过配置文件从集​​合中删除默认跟踪侦听器:

<configuration>
<system.diagnostics>
  <trace autoflush="false" indentsize="4">
    <listeners>
      <remove name="Default" />
      <add name="myListener"  type="System.Diagnostics.TextWriterTraceListener"    initializeData="c:\myListener.log" />
    </listeners>
  </trace>
</system.diagnostics>
</configuration>

其中任何一个也可以通过Debug.Listeners集合的代码完成。