Będąc nowicjuszem w rozwoju testowym, to pytanie mnie dręczyło. Jak dużo jest za dużo? Co powinno być testowane, jak powinno być testowane i dlaczego powinno być testowane? Podane przykłady są w języku C# z NUnit, ale zakładam, że samo pytanie jest agnostyczne.Przypadki testowe "kiedy", "co" i "dlaczego"?
Oto dwa aktualne przykłady własne testy na ogólną listę obiektów (testowane z ciągami, funkcja inicjalizacji dodaje trzy elementy {"Foo", "Bar", "Baz"}
):
[Test]
public void CountChanging()
{
Assert.That(_list.Count, Is.EqualTo(3));
_list.Add("Qux");
Assert.That(_list.Count, Is.EqualTo(4));
_list[7] = "Quuuux";
Assert.That(_list.Count, Is.EqualTo(8));
_list.Remove("Quuuux");
Assert.That(_list.Count, Is.EqualTo(7));
}
[Test]
public void ContainsItem()
{
Assert.That(_list.Contains("Qux"), Is.EqualTo(false));
_list.Add("Qux");
Assert.That(_list.Contains("Qux"), Is.EqualTo(true));
_list.Remove("Qux");
Assert.That(_list.Contains("Qux"), Is.EqualTo(false));
}
Kod jest dość self-komentowania, więc Nie będę się wdawał w to, co się dzieje, ale czy to nie jest zajęcie zbyt daleko? Add()
i Remove()
są testowane osobno oczywiście, więc na jaki poziom powinienem przejść z tego rodzaju testami? Czy powinienem mieć nawet tego rodzaju testy?
Powodem, dla którego go przygotowałem (używając .Add()), było to, że większość metod, które muszą pracować z danymi testowymi, ma coś, z czym można pracować. –
Rozumiem to. Jednak twoja lista może być pusta, co jest poprawnym stanem (tzn. Count powinien zwracać 0 itd.) Jest to zasadniczo "inne" niż dodanie do listy, która już zawiera elementy - stąd określenie "klasy równoważności". – Yuval
Mam test dla .Clear() i test do dodawania po .Clear(), a także test do tworzenia i dodawania do listy, która została utworzona bez początkowej pojemności. Myślę, że nadal jestem objęta, chyba że możesz wymyślić coś innego? –