Mam problem z testami, problem polega na tym iż gdy uruchamiam pojedyńczy test to przechodzi , gdy uruchamiam testy w klasie to również przechodzą, natomiast przy budowaniu w mavenie 2 testy , które wcześniej przechodziły się wysypują( pojawia się null pointer), a i to nie jest regułą. Ponieważ gdy po ponownym uruchomieniu kompa odpalam od razu build w mavenie to się wszystko buduję, za drugim razem juz nie.
nie wiem w czym jest probliem.
Aplikacja działa na javie 8
junit - 5.6.3
Mockito - 2.23.0
0
2
Pokaż logi, testy (jeśli możesz) i stack trace, bo ciężko zgadywać w ciemno.
- Jak odpalasz "pojedynczy test" i "pojedynczą klasę"? Również przez maven, czy np. runnerem z IntelliJ?
- Jeśli odpalisz pojedynczy test poprzez maven, to wtedy też przechodzi?
- Jak odpalasz wszystkie testy, to sekwencyjnie czy
równoleglewspółbieżnie?
1
Zgaduje:
- Kolejność wykonywania testów jest niedeterministyczna
- W jednym teście ustawiasz zmienną z której korzytasz w drugim
- W IntelliJ używaż IJ runnera i on puszcza testy w kolejności A, B; MVN puszcza losowo i czasami jest B;A
Zawsze rób
mock = Mockito.mock(FooService.class)
w @BeforeEach
, a setup metod mocak w każdym tescie z osobna i wszystko będzie w porządku...
1
Objawy są charakterystyczne dla ukrytego stanu.
Poza tym co wymienił 0xmarcin
jako potencjalne ukryte stany, dodałbym używanie singletonów w kodzie (ergo jeden test może wpłynąć na wynik innego, bo zmienia się stan sigletona).
0
Pokaż sensowne logi z mavena, z przebiegu, w którym testy się wysypują.
1
Klasyczny problem:
- testy które polegają na kolejności (np. w jednym teście cośtam robisz i drugi test polega na tym)
- testy które wywalą się przy równoległym odpaleniu
Jeśli to są unit testy to popatrz na wszystko co tworzysz w zasięgu całej klasy a nie konkretnego testu i zobacz czego nie czyścisz. Może np. tworzysz jakiś obiekt raz i wszystkie testy z tego jednego obiektu korzystają?