W naszym projekcie mam kilka testów JUnit , które np. Pobierają każdy plik z katalogu i uruchamiają na nim test. Jeśli zaimplementuję testEveryFileInDirectory
metodę w, TestCase
to pokazuje się jako tylko jeden test, który może się nie powieść lub zakończyć. Ale interesują mnie wyniki dla każdego pojedynczego pliku. Jak mogę napisać TestCase
/ TestSuite
takie, że każdy plik pojawia się jako osobny test, np. W graficznym TestRunnerze Eclipse? (Nie ma możliwości kodowania jawnej metody testowania dla każdego pliku).
Porównaj również pytanie ParameterizedTest z nazwą w Eclipse Testrunner .
java
unit-testing
junit
parameterized-unit-test
Hans-Peter Störr
źródło
źródło
Odpowiedzi:
Spójrz na sparametryzowane testy w JUnit 4.
Właściwie zrobiłem to kilka dni temu. Spróbuję wyjaśnić ...
Najpierw zbuduj klasę testową normalnie, tak jak testowałeś tylko z jednym plikiem wejściowym. Udekoruj swoją klasę:
Zbuduj jeden konstruktor, który pobierze dane wejściowe, które będą się zmieniać przy każdym wywołaniu testu (w tym przypadku może to być sam plik)
Następnie utwórz statyczną metodę, która zwróci a
Collection
z tablic. Każda tablica w kolekcji będzie zawierała argumenty wejściowe dla twojego konstruktora klasy, np. Plik. Udekoruj tę metodę:Oto przykładowa klasa.
Sprawdź również ten przykład
źródło
JUnit 3
JUnit 4
źródło
Junit 5 Sparametryzowane testy
Sparametryzowane testy JUnit 5 wspierają to, umożliwiając użycie metody jako źródła danych :
JUnit 5 DynamicTests
JUnit 5 wspiera to również poprzez pojęcie a
DynamicTest
, które ma być generowane w a@TestFactory
za pomocą metody statycznejdynamicTest
.Testy uruchomione w twoim IDE (tutaj IntelliJ) będą wyświetlane w następujący sposób:
źródło
Powinno to być możliwe w JUnit 3 przez dziedziczenie
TestSuite
i przesłonięcietests()
metody, aby wyświetlić listę plików i dla każdego zwrócenia instancji podklasy,TestCase
która przyjmuje nazwę pliku jako parametr konstruktora i ma metodę testową, która testuje plik podany w konstruktorze.W JUnit 4 może być jeszcze łatwiej.
źródło
Możesz rozważyć użycie biblioteki JUnitParams , więc miałbyś kilka innych (czystszych) opcji:
Możesz zobaczyć więcej przykładów użycia tutaj .
Oprócz JUnitParams, dlaczego pisanie za jego pomocą testów parametryzowanych jest łatwiejsze i bardziej czytelne :
źródło
Jeśli TestNG jest opcją, możesz użyć parametrów z dostawcami danych .
Wynik testu każdego pliku zostanie wyświetlony w raporcie tekstowym lub w interfejsie wtyczki TestNG Eclipse. Liczba wszystkich uruchomionych testów będzie liczyć każdy z Twoich plików indywidualnie.
To zachowanie różni się od teorii JUnit , w których wszystkie wyniki są skupione w jednym wpisie „teorii” i liczone jako 1 test. Jeśli chcesz osobne raportowanie wyników w JUnit, możesz wypróbować testy sparametryzowane .
Test i dane wejściowe
Przykładowe dane wyjściowe
źródło
Miałem podobny problem i skończyło się na napisaniu prostego runnera JUnit 4, który pozwala med na dynamiczne generowanie testów.
https://github.com/kimble/junit-test-factory
źródło