Quale pensi sia il modo più pulito di fare più affermazioni su un risultato? In passato ho messo tutti gli stessi test ma questo comincia a sentirsi un po 'sporco, ho appena giocato con un'altra idea usando setup.Best practice per più asserzioni sullo stesso risultato 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));
}
}
"Asserzioni logiche" è una buona parola per questo. È interessante notare che l'esempio di Assertion Roulette è essenzialmente un esempio di "come sbagliare non facendo Arrange-Act-Assert". I concetti sono diversi? – Anthony
@Anthony: i concetti sono diversi, sebbene siano strettamente correlati. È molto meno probabile che tu senta il dolore della Assertion Roulette se segui AAA (o Four Phase Test come xUnit Test Patterns lo chiama), ma sarei comunque in grado di avere Asserzioni completamente indipendenti nello stesso blocco Assert. –
L'idea di Assertion Roulette può essere ridotta a icona in NUnit specificando un commento nella dichiarazione Assert. Invece di fare "Assert.That (condition)" usa "Assert.That (condition, failureMessage)" dove 'failureMessage' è informazioni su cosa Assert stava verificando. Questo ti permetterà di sapere esattamente quale Assert all'interno di un unit test fallito. – Pedro