Jak mówi tytuł, szukam prostego sposobu na automatyczne uruchamianie testów JUnit 4.x kilka razy z rzędu za pomocą Eclipse.
Przykładem może być uruchomienie tego samego testu 10 razy z rzędu i przedstawienie wyniku.
Mamy już złożony sposób, aby to zrobić, ale szukam prostego sposobu, aby to zrobić, aby mieć pewność, że niestabilny test, który próbowałem naprawić, pozostaje naprawiony.
Idealnym rozwiązaniem byłaby wtyczka / ustawienie / funkcja Eclipse, o której nie wiem.
Odpowiedzi:
Najłatwiejszym sposobem (ponieważ wymagana jest najmniejsza ilość nowego kodu) jest uruchomienie testu jako testu sparametryzowanego (opatrzenie adnotacją
@RunWith(Parameterized.class)
i dodanie metody zapewniającej 10 pustych parametrów). W ten sposób framework uruchomi test 10 razy.Ten test musiałby być jedynym testem w klasie lub lepiej umieścić wszystkie metody testowe w klasie 10 razy.
Oto przykład:
Dzięki temu można to zrobić nawet za pomocą konstruktora bez parametrów, ale nie jestem pewien, czy autorzy frameworka to zamierzyli, czy też w przyszłości się to zepsuje.
Jeśli wdrażasz własnego biegacza, możesz poprosić biegacza o wykonanie testu 10 razy. Jeśli korzystasz z zewnętrznego narzędzia uruchamiającego , to w wersji 4.7 możesz użyć nowej
@Rule
adnotacji i zaimplementowaćMethodRule
interfejs tak, aby pobierał instrukcję i wykonywał ją 10 razy w pętli for. Obecną wadą tego podejścia jest to@Before
i@After
uruchamianie tylko raz. Prawdopodobnie zmieni się to w następnej wersji JUnit (@Before
uruchomi się po@Rule
), ale niezależnie od tego, będziesz działał na tej samej instancji obiektu (coś, co nie jest prawdą w przypadkuParameterized
runnera). Zakłada się, że niezależnie od biegacza, z którym prowadzisz zajęcia, poprawnie rozpoznaje@Rule
adnotacje. Dzieje się tak tylko w przypadku delegowania do biegaczy JUnit.Jeśli biegasz z niestandardowym biegaczem, który nie rozpoznaje
@Rule
adnotacji, naprawdę utkniesz z koniecznością napisania własnego biegacza, który deleguje odpowiednio tego biegacza i uruchamia go 10 razy.Zauważ, że istnieją inne sposoby, aby potencjalnie rozwiązać ten problem (np. Biegacz teorii), ale wszystkie wymagają biegacza. Niestety JUnit nie obsługuje obecnie warstw runnerów. To biegacz, który wiąże innych biegaczy.
źródło
Dzięki IntelliJ możesz to zrobić z konfiguracji testowej. Po otwarciu tego okna możesz uruchomić test dowolną liczbę razy.
po uruchomieniu testu intellij wykona wszystkie wybrane przez Ciebie testy tyle razy, ile podałeś.
Przykład uruchomienia 624 testów 10 razy:
źródło
Zauważyłem, że powtarzająca się adnotacja Springa jest przydatna w takich sytuacjach:
Najnowszy (Spring Framework 4.3.11.RELEASE API) dokument:
źródło
Zainspirowany następującymi zasobami:
Przykład
Utwórz i użyj
@Repeat
adnotacji w następujący sposób:Repeat.java
RepeatRule.java
PowerMock
Korzystanie z tego rozwiązania w programie
@RunWith(PowerMockRunner.class)
wymaga aktualizacji do Powermock 1.6.5 (która zawiera poprawkę ).źródło
Dzięki JUnit 5 udało mi się rozwiązać ten problem za pomocą adnotacji @RepeatedTest :
Pamiętaj, że
@Test
adnotacji nie należy używać razem z@RepeatedTest
.źródło
Coś nie tak z:
W przeciwieństwie do przypadku, gdy testujesz każdą z tablicy wartości, nie obchodzi cię, który przebieg się nie powiódł.
Nie musisz robić w konfiguracji ani adnotacji tego, co możesz zrobić w kodzie.
źródło
@Before
metody z adnotacjami przeditWorks()
rozwiązaniem mojego problemu.U mnie to działa dużo łatwiej.
źródło
public class RepeatRunner extends BlockJUnit4ClassRunner { public RepeatRunner(Class klass) throws InitializationError { super(klass); } @Override public void run(final RunNotifier notifier) { for (int i = 0; i < 10; i++) { super.run(notifier); } } }
Chociaż przynajmniej we wtyczce Eclipse JUnit otrzymujesz wyniki takie jak: „Test 10/1 zdany”W bibliotece tempus-fugit znajduje się przerywana adnotacja, która współpracuje z JUnit 4.7,
@Rule
aby powtórzyć test kilka razy lub z@RunWith
.Na przykład,
Po uruchomieniu testu (z IntermittentTestRunner w
@RunWith
),testCounter
będzie równe 99.źródło
Buduję moduł umożliwiający wykonanie tego typu testów. Ale skupia się nie tylko na powtórzeniach. Ale gwarantujemy, że jakiś fragment kodu jest bezpieczny dla wątków.
https://github.com/anderson-marques/concurrent-testing
Zależność Mavena:
Przykład użycia:
To jest projekt open source. Zapraszam do ulepszania.
źródło
Możesz uruchomić test JUnit z głównej metody i powtórzyć go tyle razy, ile potrzebujesz:
źródło
Jest to w istocie odpowiedź, którą Yishai podał powyżej, przepisaną w Kotlinie:
źródło