2016-06-20 7 views
1

NUnit 2.6.4.NUnit-Async-Tests schlagen nach der Zusammenführung fehl

Ich habe ein VS/C# -Projekt, das asynchrone Methoden einführt. Es hat viele Versuche wie diese, die passieren:

[Test] 
    public async void NullProcThrows_Async() 
    { 
     var keyList = new KeyList<int>(); 
     Assert.Throws<ArgumentNullException>(async() => await keyList.LoadAsync((IDBProcedure)null, "ID", CancellationToken.None)); 
    } 

ich dies in unserem Stamm zusammengeführt haben (keine Konflikte) und jetzt dieser Test fehlschlägt. Ich versuche den Unterschied herauszufinden.

Wenn ich den Code im Kofferraum verfolgen sehe ich zwei Ausnahmen geworfen:

Die erste ist die Argument ich erwarte. Die zweite ist

NUnit.Framework.AssertionException saying Expected 
<System.ArgumentNullException> But was: null 

Wenn ich den Test auf dem Zweig Version laufen nur sehe ich die einzige Ausnahme und der Test bestanden.

Was könnte zwischen den beiden Projekten unterschiedlich sein?

+0

Was haben Sie zusammengeführt? – SLaks

+0

Es klingt, als würden Sie ein 'async void'-Lambda übergeben. – SLaks

+0

Haben Sie den Code in Ihrem Zweig mit dem Stamm verglichen, um zu sehen, was anders ist? Es ist sehr wahrscheinlich, dass die Zusammenführung "fehlgeschlagen" (in dem Sinne, dass der falsche Code zusammengeführt wird) und ein Unterschied zeigt, was falsch ersetzt wurde. – ChrisF

Antwort

1

Es scheint ein paar Probleme mit dem Code versehen zu werden, ist folgendes zu beachten:

[Test, ExpectedException(typeof(ArgumentNullException)] 
public async Task NullProcThrows_Async() 
{ 
    var keyList = new KeyList<int>(); 
    await keyList.LoadAsync((IDBProcedure)null, "ID", CancellationToken.None); 
    Assert.Fail("This should never be executed as we expected the above to throw."); 
} 

Nach der NUnit Dokumentation, sollten Sie die ExpectedException statt Assert.Throws Attribut werden. Also habe ich dieses Attribut hinzugefügt und dann die Assert.Throws entfernt und stattdessen Assert.Fail hinzugefügt. Auch habe ich die Methode Task zurückgegeben und dies verhindert die async void. Schließlich verhindert dies die async lambda.

+0

Danke David. Ich werde dies als ein Update betrachten. Ich war in einem Jang, um die Fusion nach unserer Veröffentlichung über das Wochenende erfolgreich zu machen. Alles hat gut in der Branche getestet und nicht im Kofferraum. also müssen ein paar Bits gevögelt worden sein, denn ein komplettes get-next löste das Problem. – n8wrl

Verwandte Themen