У меня есть статический метод, который ищет текущий объект userSession и возвращает строку.
public static String getCurrentUser()
{
UserSession userSession = buildUserSession();
String responseString = userSession.getUsername();
return responseString;
}
Для этого я вызываю закрытый статический метод, чтобы создать экземпляр объекта сеанса и вернуть его первому методу.,Метод buildUserSession многократно используется во многих других методах.
private static UserSession buildUserSession()
{
Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
UserDetails userDetails = (UserDetails) principal;
String[] rolesArray = ConversionUtils.convertObjectArrayToStringArray(userDetails.getAuthorities().toArray());
List<String> rolesList = Arrays.asList(rolesArray);
UserSession userSession = new UserSession();
userSession.setRoles(rolesList);
userSession.setUsername(userDetails.getUsername());
return userSession;
}
Из того, что я понимаю, на данный момент статический метод mocking лучше всего выполнять с помощью mockito + powermock.Хотя мне не удается заставить эту настройку работать, когда у меня есть статический метод внутри статического метода, который я хочу протестировать.Можете ли вы помочь мне с этим модульным тестом?
РЕДАКТИРОВАТЬ: я хочу проверить getCurrentUser () и и макет buildUserSession ().
@RunWith(PowerMockRunner.class)
@PrepareForTest(SecurityUtils.class)
public class SecurityUtilsTests {
@Test
public void getCurrentUserTest() throws Exception {
// when
String expected = "testUsername";
UserSession userSession = new UserSession();
userSession.setUsername(expected);
PowerMockito.mockStatic(SecurityUtils.class);
PowerMockito.when(SecurityUtils.class, "buildUserSession").thenReturn(userSession);
String actual = SecurityUtils.getCurrentUser();
assertThat(actual).isEqualTo(expected);
}
}