Cześć! Chętnie poznam wasze zdanie na temat testu pewnej metody.
File createFile(String fileName, File content)
String someProperties = externalService.getProperty(CONSTANT);
return externalService.createFile(fileName, content, someProperty);
@Test
void test()
String fileName = "fileName";
File file = new File(fileName);
String propertyValue = "propertyValue";
when(externavSelvice.getProperty(CONSTANT)).doReturn(propertyValue);
when(fileName, content, propertyValue).thenReturn(file)
File result = underTest.createFile(fileName, file);
assertSame(result, file)
Według mnie w momencie, kiedy metoda składa się z dwóch wywołań zewnetrznych serwisów, a w teśćie obydwa z nich są zmockowane to ten test nie sprawdza nic oprócz tego, czy ta propertiska wyciągnięta z pierwszego serwisu i parametry metody są przekazane w dobrej kolejności do metody drugiego serwisu. Czy takie testy mają sens? Mamy burzliwą dyskusję w firmie:D
Czy test jednostkowy powinien sprawdzać jakie serwisy są wywoływane w środku metody czy może liczy się tylko wynik wyjściowy?
Usłyszałem opinię, że ten test właśnie sprawdza logikę tej metody. Bo ta metoda ma wołać te serwisy!
Według mnie test nie powinien się opierać na sprawdzaniu czy servisA został wywołany. W testach interesuje mnie tylko wynik końcowy - dla metody dodawania nie interesuje mnie czy liczby zostały zliczone w streamie, forze czy została zawołana zewnętrzna usługa. Liczy się, że dla liczb 5, 4 i 3 dostanę wynik 12.
Chętnie wysłucham waszej opinii.