Grundsätzlich NUnit, xUnit, MbUnit, MSTest und dergleichen Methoden ähnlich der folgenden:Gibt es ein C# Unit-Testframework, das beliebige Ausdrücke anstelle einer begrenzten Anzahl von Adhoc-Methoden unterstützt?
Assert.IsGreater(a,b)
//or, a little more discoverable
Assert.That(a, Is.GreaterThan(b))
Jedoch gibt es eine begrenzte Anzahl von solchen Vergleichsoperatoren eingebaut; und sie kopieren die Sprachenoperatoren unnötig. Wenn ich will alles noch etwas komplex, wie ...
Assert.That(a.SequenceEquals(b))
Ich bin oft entweder links durch die manuelle Graben das Äquivalent des Ausdrucks in NUnit-sprechen zu finden, oder gezwungen sind, zu fallen-zurück zu einfache boolesche Assertionen mit weniger hilfreichen Fehlermeldungen
C#, integriert aber auch mit beliebigen Ausdrücke - so sollte es möglich sein, ein Verfahren mit der folgenden Signatur hat:
void That(Expression<Func<bool>> expr);
Ein solches Verfahren verwendet werden, um sowohl den Test durchführt (dh Validierung der Behauptung) und auch eine weniger undurchsichtige Diagnose im Falle eines Testversagens bereitzustellen; schließlich kann ein Ausdruck in Pseudocode gerendert werden, um anzuzeigen, welcher Ausdruck fehlgeschlagen ist; und mit einiger Mühe könnten Sie sogar versagende Ausdrücke intelligent bewerten, um einen Hinweis auf den Wert von Teilausdrücken zu geben.
Zum Beispiel:
Assert.That(()=> a == b);//could inspect expression and print a and b
Assert.That(()=> a < b && b < c);
//could mention the values of "a<b" and "b<c" and/or list the values of a, b, and c.
Zumindest würde es die Verwendung einer parallelen Sprache für Ausdrücke überflüssig machen und in einigen Fällen kann es Fehlermeldungen nützlicher machen.
Gibt es so etwas?
Bearbeiten: Nach dem Versuch (und liking!) Power Assert, endete ich es neu implementieren, um mehrere Einschränkungen zu beheben. Meine Variante davon ist veröffentlicht als ExpressionToCode; Eine Liste der Verbesserungen finden Sie unter my answer below.
die Ideen in Rhino Mocks –
MbTest Betrachten? Ich nehme an, du mischst MbUnit und MSTest zusammen :) –
Whoops, du hast Recht - behoben. –