2017-04-26 3 views
0

Mit Nunit 3nunit3 zu testen versucht, dass ein Thread den Threadabort wirft, wenn ich den Faden

Testfall abbrechen:, die ein Thread ich erstellt und begann, eine Threadabort wirft, wenn ich abbrechen die den Faden

Erwartetes Ergebnis: passieren

Ergebnis (für Test, dass Threadabort passiert zu bestätigen): ist fehlgeschlagen mit

Fehler
NUnit.Framework.AssertionException: ' Expected:  <System.Threading.ThreadAbortException> 
But was: null 

Nunit 3 Testcode:

[SetUp] 
    public void Setup() 
    { 
     _threadViewModel.CreateThread(); 
    } 

[Test] 
    public void TestThreadThrowsAbortedException() 
    { 
     try 
     { 
      _threadViewModel.RunThread(); 
      Assert.Throws<ThreadAbortException>(() => _threadViewModel.AbortThread()); 
     } 
     catch (ThreadAbortException e) 
     { 
     } 
    } 

enter image description here

Visual Studio Ausgabefenster: das Ausgabefenster korrekt ist

System.Threading.ThreadAbortException: Thread was being aborted. at Multthreading.ThreadRunner.WriteY() 

Problem: der nunit 3 Test für mich nicht bestätigen, dass die Ausnahme

Antwort

1

Die CLR wird automatisch die ThreadAbortException nach dem catch-Block erneut zu erhöhen (siehe diese answer für weitere Informationen) geworfen wurde.

Sie können versuchen, die Thread.ResetAbort()-Methode im Catch-Block Ihres Testcodes zu verwenden - lesen Sie die Anmerkungen.

[Test] 
public void TestThreadThrowsAbortedException() 
{ 
    try 
    { 
     _threadViewModel.RunThread(); 
     Assert.Throws<ThreadAbortException>(() => _threadViewModel.AbortThread()); 
    } 
    catch (ThreadAbortException e) 
    { 
     Thread.ResetAbort(); 
    } 
} 

Es funktioniert für mich mit meinem Testläufer. YMMV.

+0

Die thread.ResetAbort() stoppt die ThreadAbortException von rethrown aber nur in dem tatsächlichen Code. Im Test werden die Ausnahmen nicht abgefangen. Ich war jedoch in der Lage, den ThreadState zu testen. Ich aktualisiere gerade den Code und werde bald weitere Informationen veröffentlichen. – user2113566

Verwandte Themen