PowerMockito + Mockito - mockowane statyczne metody nie wykonują się dobrze na testowanym obiekcie

0

Witam :)
Mam sobie taką metode :

 
@Override
	@Transactional(propagation = Propagation.REQUIRED)
	public void register(UserRegisterDTO userRegisterDTO) {
		String encodedPassword = passwordEncoder.encode(userRegisterDTO.getPassword());
		User user = new User(userRegisterDTO.getUsername(), encodedPassword, userRegisterDTO.getEmail(), true);
		userDAO.create(user);
		Authority authority = authorityDAO.readBySymbol("USER_ROLE");
		LocalDateTime now = LocalDateTime.now();
		System.out.println(now);//sprawdzenie mockowania
		Timestamp timeFrom = Timestamp.valueOf(now);
		UserAuthority userAuthority = new UserAuthority(user, authority, timeFrom, null);
		userAuthorityDAO.create(userAuthority);
		
	}

Chciałem sobie zamokować statyczą metodę LocalDateTime.now();
Odpalam więc JUnit z takimi adnotacjami

@RunWith(PowerMockRunner.class)
@PrepareForTest(value = {LocalDateTime.class})

 

i w testach takie coś mam:

LocalDateTime nowMock = LocalDateTime.of(2016, 5, 7, 21, 37,0);
PowerMockito.mockStatic(LocalDateTime.class);
Mockito.when(LocalDateTime.now()).thenReturn(nowMock);
/*
*Ustawianie innych wartości
*/
userService.register(userRegisterDTO); 
 

Kiedy wywowal LocalDateTime.now to w JUnit wartość jest zgoda z oczekiwaną (2016, 5, 7, 21, 37,0) ale w serwisie już nie :/

0

Nie jestem specem od PowerMockito, ale możesz to obejść zwykłym mockiem. Możesz sobie wydzielić metodę protected typu "getCurrentTime" i zamockować ją, aby zwracała dany czas. W metodzie register wywoływałbyś tę metodę, aby otrzymać dany czas.

0

Też nad tym myślałem i gdy nie znajdę rozwiązania pewno tak zrobie ale wole jednak wiedzieć czemu to nie działa

0

Generalnie ja w takim przypadku robię zawsze sobie serwis, implementację np. getCurrentDate() czy co tam ma być i po prostu sobie stubuje to w tescie.
Moim zdaniem to jest czytelna, bez żadnych trików, powermocków i najlepsza metoda.

1

A nie musisz też czasem tego serwisu wrzucic do PrepareForTest?

0

A faktycznie dzięki :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1