Twoja strategia i szkielet zależy, nie trywialnie, od rodzaju testów, które chcesz wygenerować, jakiego rodzaju zasięgu szukasz oraz od języka / środowiska, w którym pracujesz.
Napisanie generatora testowego, który dla języków takich jak C lub Java, odczytuje podpisy klas i automatycznie generuje testy dla standardowych przypadków narożnych (przekazanie 0, 2 losowych wartości, MAX_INT, MIN_INT, do argumentu liczb całkowitych, wartości zerowe dla wartości zerowych jest dość proste. itp.). Następnie można uruchomić wygenerowane testy, zapisać wyniki dla każdego testu i ręcznie je przefiltrować, aby usunąć niepotrzebne testy, zatwierdzić akceptowalne wyniki testów, które pomyślnie przejdą (aby mogły automatycznie przejść od tego momentu), i oznaczyć jako nieprawidłowe testy, które się nie powiodą .
Możesz to rozszerzyć o dodawanie tagów / komentowanie / refaktoryzację klas, aby pomóc generatorowi z dodatkowymi wskazówkami. Może istnieć znacznik, który zawiera listę wszystkich możliwych wyjątków, które może wywoływać wywołanie metody, lub daje ograniczony zakres prawidłowych liczb całkowitych dla argumentu liczby całkowitej. Spójrz na nie jako na krótkie przygotowanie do samodzielnego napisania testów.
Oto niektóre elementy, na które chcesz spojrzeć:
- Komponent do automatycznego analizowania kodu źródłowego / podpisów funkcji / adnotacji ręcznych, tworzenia standardowych przypadków testowych lub konturów / podpisów dla przypadków testowych, które czekają na zakończenie wprowadzania danych.
- Nieustannie rosnący / zmieniający się język znaczników / adnotacji / komentarzy, który może przechodzić na dowolny poziom szczegółowości (metoda / klasa / podpis / pętle while / etc ...) reprezentujący wskazówki dla automatycznego konstruktora testów. Idealnie powinieneś być w stanie grać z tym językiem bez konieczności przekodowywania swojego frameworka lub fragmentów w nim
- Zautomatyzowany tester z możliwością identyfikowania nowych / starych testów i rejestrowania / testowania pod kątem „akceptowalnych” odpowiedzi dla każdego testu. Idealnie, ten biegacz zbuduje bazę danych uruchomień testowych, wyników zaakceptowanych / odrzuconych oraz bieżących akceptowalnych wyników dla każdego testu.
- Zautomatyzowany „fałszerstwo obiektów”, który, biorąc pod uwagę nazwę klasy i mapę nazw-> wartości, może wygenerować obiekt naśladujący klasę, zwracający konfigurowalne dane dla wywołań funkcji, akcesoriów, publicznych gniazd danych itp.
Istnieje wiele frameworków testowych, które już zawierają fragmenty tej funkcjonalności dla różnych języków i platform. Chociaż dość łatwo jest rozpocząć wykonywanie tej pracy samemu i rozwinąć tego rodzaju ramy organicznie wewnętrznie, jest to również niekończący się długoterminowy projekt, który prawdopodobnie będzie powielał istniejącą pracę. Polecam poświęcić dużo czasu, aby najpierw sprawdzić, co jest dostępne, a następnie zdecydować, czy warto poświęcić czas.