2015-06-23 19 views
7

ich zwei Unit-Tests haben, die TypeMock Isolator verwenden zu isolieren und zu fälschen Methode von SqlMembershipProvider der asp.net.TypeMock Trenner: WillThrow() blutet über Unit-Test-Grenzen?

In Test 1 habe ich:

 Isolate.WhenCalled(
      () => 
       Membership.CreateUser(...))) 
      .WithExactArguments() 
      .WillThrow(new Exception()); 

In Test 2 habe ich:

 Isolate.WhenCalled(
      () => 
       Membership.CreateUser(...))) 
      .WithExactArguments() 
      .WillReturn(new MembershipUser(...)); 

Wenn ich jeden Test von selbst laufen sie beide erfolgreich passieren.

Wenn ich beide Tests laufen, Prüfnummer 1 läuft zuerst und übergibt, dann Prüfnummer 2 läuft und schlägt mit den in Test geworfen Ausnahme 1.

Warum sollte der WillThrow() Anweisung in Test 1 „bluten über“ zu Test 2? Schließlich definiert Test 2 explizit unterschiedliches Verhalten - WillReturn()?

+1

Sie haben keine vollständige Schnipsel enthalten, so dass ich die offensichtliche Frage stellen ... Haben die Tests/Klasse mit dem 'Isolated' Attribut markiert worden ist, oder Sie rufen' Isolator.Cleanup' das Verhalten zurücksetzen ? http://www.typemock.com/rule-missing-isolated-attribut – forsvarir

+0

@forsvarir Danke. Das Hinzufügen des '[Isolated]' 'Attributs behob das Problem. Möchten Sie dies als Antwort posten, damit ich es akzeptieren kann? – urig

Antwort

6

Wenn TypeMock Verhaltensweisen zwischen den Tests bluten, dann das erste, was ist zu prüfen, ob Sie zwischen den Tests sind aufzuräumen. Sie können dies explizit tun Isolater.CleanUp() durch den Aufruf oder die preferred approach verwendet, die entweder die Testmethoden oder die Testklasse selbst mit dem [Isolated] Attribute zu dekorieren ist.