2015-08-19 4 views
0

Я тестирую DLL-файлы Debug с NUnit, и очень раздражает то, что при каждом тестировании появляется большое количество утверждений Debug.Закрыть предстоящее Debug Assertion

Так что я написал инструмент, который опрос для нового утверждения Debug. инструмент выполняет итерацию для всех окон каждые миллисекунды и проверяет, является ли заголовок одной из коллекции возможных заголовков окна Debug Assertion.

В псевдокоде это выглядит следующим образом:

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); 
      } 
     } 
    } 
} 

codeline SendKeys.SendWait("%I") посылает keycombination из ALT + I к окну, которое является keycombination для «Продолжить».

Мой вопрос:
Есть ли лучший вариант? что-то вроде:

  • событие, когда новое окно появляется
  • Лучший способ закрытия окна (метод CloseWindow из User32.dll не не работал для меня - не исключение, но ничего не происходит)
  • Лучшее решение для решения SetToForeGround()
  • Лучшим способом было бы подавление утверждения - возможно ли это?

Мой способ работает, но я думаю, что мое решение очень подвержено ошибкам. Итак, у меня дыра есть кто-то с хорошей идеей

+0

Я отправлю в качестве ответа на примере. –

ответ

1

Вы можете настроить поведение диалогового окна. Это поведение, предоставляемое DefaultTraceListener, которое настраивается в коде или через файл конфигурации. В документации для Debug.Assert упоминается это.

В конфигурационном файле, вы можете отключить пользовательский интерфейс, как это:

<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.

+0

Thx для вашего ответа. На данный момент у меня не так много времени. я отчитаю, когда я его проверил;) – Jens

Смежные вопросы