Was ist Ihrer Meinung nach der sauberste Weg, mehrere Asserts zu einem Ergebnis zu machen? In der Vergangenheit habe ich ihnen alle den gleichen Test gegeben, aber das fängt an, ein bisschen schmutzig zu sein, ich habe gerade mit einer anderen Idee gespielt, die Setup verwendet.Best Practices für mehrere Asserts bei gleichem Ergebnis in C#
[TestFixture]
public class GridControllerTests
{
protected readonly string RequestedViewId = "A1";
protected GridViewModel Result { get; set;}
[TestFixtureSetUp]
public void Get_UsingStaticSettings_Assign()
{
var dataRepository = new XmlRepository("test.xml");
var settingsRepository = new StaticViewSettingsRepository();
var controller = new GridController(dataRepository, settingsRepository);
this.Result = controller.Get(RequestedViewId);
}
[Test]
public void Get_UsingStaticSettings_NotNull()
{
Assert.That(this.Result,Is.Not.Null);
}
[Test]
public void Get_UsingStaticSettings_HasData()
{
Assert.That(this.Result.Data,Is.Not.Null);
Assert.That(this.Result.Data.Count,Is.GreaterThan(0));
}
[Test]
public void Get_UsingStaticSettings_IdMatches()
{
Assert.That(this.Result.State.ViewId,Is.EqualTo(RequestedViewId));
}
[Test]
public void Get_UsingStaticSettings_FirstTimePageIsOne()
{
Assert.That(this.Result.State.CurrentPage, Is.EqualTo(1));
}
}
"Logische Behauptungen" ist ein gutes Wort dafür. Es ist interessant, dass das Assertion Roulette-Beispiel im Wesentlichen ein Beispiel dafür ist, "wie man schief geht, indem man nicht Arrange-Act-Assert durchführt". Unterscheiden sich die Konzepte? – Anthony
@Anthony: Die Konzepte unterscheiden sich, obwohl sie eng miteinander verwandt sind. Es ist viel weniger wahrscheinlich, dass Sie den Schmerz von Assertion Roulette spüren, wenn Sie AAA (oder Vier-Phasen-Test, wie xUnit Test Patterns es nennt) fühlen, aber ich würde immer noch variieren, wenn ich völlig unabhängige Zusicherungen im selben Assert-Block habe. –
Die Idee von Assertion Roulette kann in NUnit durch Angabe eines Kommentars in der Assert-Anweisung minimiert werden. Anstatt "Assert.That (condition)" auszuführen, verwende "Assert.That (condition, failureMessage)", wobei "failureMessage" eine Information darüber ist, was der Assert überprüft hat. Dadurch wissen Sie genau, welche Assert-Anweisung in einem Komponententest fehlgeschlagen ist. – Pedro