Przykładowa metoda do przetestowania:
public class StringHelper { public static int CountLetters(string word, char letter) { return word.Count(c => c == letter); } }
...i odpowiadający mu UnitTest.
[TestFixture] public class StringHelperTest { [Test] public void CountLettersTest() { //Arrange var @string = "copacabana"; var letter = 'a'; int expected = 4; //Act int current = StringHelper.CountLetters(@string, letter); //Assert Assert.AreEqual(expected, current); } }
Dla klas i metod obowiązuje pewna konwencja dodawania na końcu nazw słowa Test. Unit Testy można także bez problemu Debugować. Korzystając z dodatku Resharper można uruchamiać pojedyncze testy bezpośrednio w kodzie.
Przydatnymi atrybutami są SetUp i TearDown. Będą to metody wykonywane raz odpowiednio przed i po sesji testów.
[SetUp] public void Init() { Console.WriteLine("Initializing..."); } [TearDown] public void Clean() { Console.WriteLine("Shutting down..."); }
Testy można także w razie potrzeby grupować w kategorie, również przez odpowiedni atrybut.
[Test] [Category("another tests")] public void CountLettersTest2() { //Arrange var @string = "copACABana"; var letter = 'a'; int expected = 2; //Act int current = StringHelper.CountLetters(@string, letter); //Assert Assert.AreEqual(expected, current); }
Dzięki temu z poziomu GUI możemy odpalać na przykład tylko testy z danej kategorii.
Ostatnia ciekawa funkcjonalność to timeouty. Możemy ustawić dla danej metody maksymalny czas wykonania poprzez atrybut MaxTime, np. [MaxTime(5000)].
Brak komentarzy:
Prześlij komentarz