xUnit-Async-Test funktioniert nicht ordnungsgemäß

Wir haben xUnit Framework in unserem Projekt von Anfang an als Testframework verwendet. Derzeit gibt es mehr als 2200 Unit-Tests im Projekt und alles scheint in Ordnung zu sein.

Aber gestern habe ich mich entschlossen, Unit Tests bei CI Builds und Nightly Builds durchzuführen. Ich kämpfe mit dem Teambuild-Controller, um 1 bis 2 Stunden lang XUNIT-Tests durchzuführen. Aber es gab ein Problem, es gab 22 Warnungen zu Tests wie den folgenden: - Xunit.Sdk.EqualException: Assert.Equal () Failure oder - System.ArgumentNullException: Wert darf nicht null sein.

Nach einigen Nachforschungen wurde mir klar, dass diese Tests fehlschlagen müssen, aber sie scheinen bestanden zu sein, da alle diese Tests mit dem Schlüsselwort "async" gekennzeichnet sind.

Eigentlich sollte es keinen Fehler geben, da xUnit asynchrone Tests bezüglich dieser Posts unterstützthttp://bradwilson.typepad.com/blog/2012/01/xunit19.html http://sravi-kiran.blogspot.com.tr/2012/11/UnitTestingAsynchronousMethodsUsingMSTestAndXUnit.html Die Realität ist für mich ein kleiner Unterschied. Ja, xUnit läuft ohne Probleme, wird aber nicht richtig getestet.

Hier sind zwei kleine Methoden.

public async Task<string> AsyncTestMethod() {
    throw new Exception("Test");
}
public string NormalTestMethod() {
    throw new Exception("Test");
}

Wie Sie nur sehen können, ist die erste Methode als "asynchron" definiert. Hier sind zwei Tests für diese Methoden.

  [Fact]
    public async void XunitTestMethod_Async() {
        Program p = new Program();
        string result = await p.AsyncTestMethod();
        Assert.Equal("Ok", result);
    }
        [Fact]
    public  void XunitTestMethod_Normal() {
        Program p = new Program();
        string result =  p.NormalTestMethod();
        Assert.Equal("Ok", result);
    }

Beide der ursprünglichen Methoden werfen Ausnahme, also denke ich, dass beide der Tests fehlschlagen sollten, aber das Ergebnis unterschiedlich ist. Sie können die Ergebnisse sehen:

XunitTestMethod_Async-Test bestanden, aber XunitTestMethod_Normal schlägt fehl. Das Auslösen einer Ausnahme ist nicht der Fall. Sie können den Methodeninhalt nach Belieben ändern. AsyncTestMethod wird immer übergeben.

Hier ist die Beispiellösung:https://github.com/bahadirarslan/AsyncTestWithxUnit

Ich könnte falsch verstanden oder gedacht haben, aber dieses Verhalten bereitet mir große Schmerzen

Hoffe du kannst mich aufklären.

PS: Ich habe ein Problem auf der xUnit-Github-Seite erstellt, aber ich konnte nicht sicher sein, ob dies auf mich oder xUnit zurückzuführen ist. Also habe ich beschlossen, auch hier zu fragen. Problem:https://github.com/xunit/xunit/issues/96

Antworten auf die Frage(1)

Ihre Antwort auf die Frage