我使用的是Spring framework 2.4.4和Intellij Ultimate 2020
我想测试在其上传递HttpSession的这个方法tryGetUser,但我无法解决这个问题,因为当我在方法的//Arrange部分模拟它和setAttribute();时,它总是以currentUserUsername为空结束。
public User tryGetUser(HttpSession session) {
String currentUserUsername = (String) session.getAttribute("currentUserUsername");
***// Here this local variable currentUsername is always null;***
if (currentUserUsername == null) {
throw new AuthorizationException("No logged in user.");
}
try {
return userService.getByUsername(currentUserUsername);
} catch (EntityNotFoundException e) {
throw new AuthorizationException("No logged in user.");
}
}在这里,您可以看到我是如何尝试Mock它的,但实际上,会话仍然是空的,或者我不知道,但是当服务方法开始执行时,属性不在那里。
@ExtendWith(MockitoExtension.class)
public class LoginServiceMvcTests {
@Mock
UserRepository mockUserRepository;
@Mock
UserService mockUserService;
@InjectMocks
MockHttpSession mockHttpSession;
@InjectMocks
LoginServiceMvc userService;
private User junkie;
private User organizer;
@BeforeEach
public void setup() {
junkie = Helpers.createJunkie();
organizer = Helpers.createOrganizer();
}
@Test
public void tryGetUser_Should_GetUserFromSession_When_UserIsLogged() {
// Arrange
mockHttpSession.setAttribute("luboslav", junkie);
Mockito.when(mockUserService.getByUsername("luboslav"))
.thenReturn(junkie);
// Act
userService.tryGetUser(mockHttpSession);
// Assert
Mockito.verify(mockUserService, Mockito.times(1))
.getByUsername("luboslav");
}
}发布于 2021-04-06 09:34:41
发布于 2021-04-06 10:07:34
使用MockHttpSession,它是一个实际的真实对象(而不仅仅是Mockito接口模拟),它正是为了这种类型的测试而设计的。它基本上是一个空/空的容器,所以你不必模拟所有的标准行为,只需用你想要的任何属性填充它即可。
https://stackoverflow.com/questions/66961507
复制相似问题