Cześć,
mam takie przykładowe testy jednostkowe wraz z metodami pomocniczymi w osobnej klasie. Jak widzicie poniżej, te metody mają jakieś argumenty, które muszę potem w testach dodać, przez co test, może wydawać się trudniejszy do zrozumienia. No bo co, jeśli będę miał tych mocków z 20. Macie jakieś propozycje dla mnie, jak mogę uporządkować lub uprościć te testy?
Dzięki za pomoc.
Klasa z testami:
@ExtendWith(MockitoExtension.class)
public class LoginServiceImplTest {
@InjectMocks
private LoginServiceImpl login;
@Mock
private JwtTokenProvider tokenProvider;
@Mock
private AuthenticationManager authManager;
@Mock
private Authentication auth;
@Mock
private ApplicationMessageService message;
@Test
void whenLoginSuccess_ReturnToken() {
String token = validLogin(authManager, auth, tokenProvider, login, "User", "Password#3");
assertEquals("token", token);
}
@Test
void whenLoginFailure_NoGenerateToken() {
assertNoTokenGeneration(authManager, auth, tokenProvider, login, "invalid", "invalid");
}
}
Klasa pomocnicza:
public class LoginServiceImplTestHelper {
public static String validLogin(AuthenticationManager authManager, Authentication auth,
JwtTokenProvider tokenProvider, LoginService login,
String username, String password) {
LoginRequest loginRequest = new LoginRequest(username, password);
when(authManager.authenticate(any(UsernamePasswordAuthenticationToken.class)))
.thenReturn(auth);
when(tokenProvider.generateToken(auth)).thenReturn("token");
return login.login(loginRequest);
}
public static void assertNoTokenGeneration(AuthenticationManager authManager, Authentication auth,
JwtTokenProvider tokenProvider, LoginService login,
String username, String password) {
LoginRequest loginRequest = new LoginRequest(username, password);
when(authManager.authenticate(any())).thenThrow(
new BadCredentialsException("Incorrect credentials"));
assertThrows(BadCredentialsException.class, () -> login.login(loginRequest));
verify(tokenProvider, never()).generateToken(auth);
}
}