Jeśli masz do czynienia z dużą ilością starszego kodu, który nie jest obecnie testowany, dobrym pomysłem jest uzyskanie zasięgu testowego teraz zamiast czekania na hipotetyczny duży przepis w przyszłości. Rozpoczęcie od napisania testów jednostkowych nie jest.
Bez automatycznego testowania po wprowadzeniu jakichkolwiek zmian w kodzie należy wykonać ręczne testowanie aplikacji od końca do końca, aby upewnić się, że działa. Zacznij od napisania testów integracji wysokiego poziomu, aby to zastąpić. Jeśli Twoja aplikacja wczytuje pliki, sprawdza je, przetwarza dane w określony sposób i wyświetla wyniki, które chcesz przechwycić.
Idealnie będziesz mieć dane z ręcznego planu testów lub będziesz w stanie uzyskać próbkę rzeczywistych danych produkcyjnych do wykorzystania. Jeśli nie, ponieważ aplikacja jest produkowana, w większości przypadków robi to, co powinna, więc po prostu wymyśl dane, które osiągną wszystkie najwyższe punkty i założymy, że dane wyjściowe są prawidłowe. Nie jest to gorsze niż przyjmowanie małej funkcji, zakładanie, że robi to, co jej nazwa lub jakiekolwiek komentarze sugerują, że powinna działać, i pisanie testów, zakładając, że działa poprawnie.
IntegrationTestCase1()
{
var input = ReadDataFile("path\to\test\data\case1in.ext");
bool validInput = ValidateData(input);
Assert.IsTrue(validInput);
var processedData = ProcessData(input);
Assert.AreEqual(0, processedData.Errors.Count);
bool writeError = WriteFile(processedData, "temp\file.ext");
Assert.IsFalse(writeError);
bool filesAreEqual = CompareFiles("temp\file.ext", "path\to\test\data\case1out.ext");
Assert.IsTrue(filesAreEqual);
}
Gdy masz już wystarczająco dużo testów wysokiego poziomu, aby uchwycić normalne działanie aplikacji i najczęstsze przypadki błędów, czas poświęcony na uderzenie w klawiaturę, aby spróbować wykryć błędy z kodu, robiąc coś innego niż myślałeś, że to powinno znacznie spaść, co znacznie ułatwi refaktoryzację w przyszłości (lub nawet duże przepisanie).
Ponieważ możesz rozszerzyć zakres testów jednostkowych, możesz ograniczyć lub nawet wycofać większość testów integracyjnych. Jeśli aplikacja odczytuje / zapisuje pliki lub uzyskuje dostęp do bazy danych, oczywistym miejscem do rozpoczęcia jest przetestowanie tych części w izolacji i wyszydzenie ich lub rozpoczęcie testów od utworzenia struktur danych odczytanych z pliku / bazy danych. W rzeczywistości stworzenie tej infrastruktury testowej zajmie dużo więcej czasu niż napisanie zestawu szybkich i brudnych testów; i za każdym razem, gdy przeprowadzasz 2-minutowy zestaw testów integracyjnych zamiast 30 minut ręcznego testowania ułamka tego, co obejmowały testy integracyjne, już osiągasz dużą wygraną.