Mockito 在调用 void 方法后断言
Mockito assert after calling a void method
@Test
public void shoudTestAssigneeSuccessfully() throws Exception {
// given
ApplicationUserDetails applicationUser = createApplicationUser();
when(accessControlUtil.getLoggedInUser()).thenReturn(applicationUser);
SomeEntity mockResponse = mock(SomeEntity.class);
when(mockResponse.getAssignee()).thenReturn(applicationUser.getUsername());
when(someRepository.findOneById(anyString())).thenReturn(Optional.of(mockResponse));
when(someRepository.save(any(SomeEntity .class))).thenReturn(mockResponse);
// when
someService.submitSomething(new SomeDataDto(SOME_ID, SOME_PARAM)); // A void method
// then
assertNull(mockResponse.getAssignee()); // ??
verify(someRepository).save(any(SomeEntity .class));
}
你好,我有这个测试,它基本上应该在执行服务调用 submitSomething
后检查 Assignee
是否为空。但是,submitSomething()
是一个 void 方法,它在内部将 Assignee
设置为 null。
请让我知道我需要进行哪些修改才能成功测试。
经过大量的反复试验,终于弄明白了。
解决方案相当简单。与其直接模拟 SomeEntity
,我必须手动创建一个新的模拟实例并先手动设置 Assignee
。
@Test
public void shoudTestAssigneeSuccessfully() throws Exception {
// given
ApplicationUserDetails applicationUser = createApplicationUser();
when(accessControlUtil.getLoggedInUser()).thenReturn(applicationUser);
SomeEntity mockResponse = new SomeEntity();
mockResponse.setAssignee(applicationUser.getUsername());
when(someRepository.findOneById(anyString())).thenReturn(Optional.of(mockResponse));
when(someRepository.save(any(SomeEntity .class))).thenReturn(mockResponse);
// when
someService.submitSomething(new SomeDataDto(SOME_ID, SOME_PARAM)); // A void method
// then
assertNull(mockResponse.getAssignee());
verify(someRepository).save(any(SomeEntity .class));
}
@Test
public void shoudTestAssigneeSuccessfully() throws Exception {
// given
ApplicationUserDetails applicationUser = createApplicationUser();
when(accessControlUtil.getLoggedInUser()).thenReturn(applicationUser);
SomeEntity mockResponse = mock(SomeEntity.class);
when(mockResponse.getAssignee()).thenReturn(applicationUser.getUsername());
when(someRepository.findOneById(anyString())).thenReturn(Optional.of(mockResponse));
when(someRepository.save(any(SomeEntity .class))).thenReturn(mockResponse);
// when
someService.submitSomething(new SomeDataDto(SOME_ID, SOME_PARAM)); // A void method
// then
assertNull(mockResponse.getAssignee()); // ??
verify(someRepository).save(any(SomeEntity .class));
}
你好,我有这个测试,它基本上应该在执行服务调用 submitSomething
后检查 Assignee
是否为空。但是,submitSomething()
是一个 void 方法,它在内部将 Assignee
设置为 null。
请让我知道我需要进行哪些修改才能成功测试。
经过大量的反复试验,终于弄明白了。
解决方案相当简单。与其直接模拟 SomeEntity
,我必须手动创建一个新的模拟实例并先手动设置 Assignee
。
@Test
public void shoudTestAssigneeSuccessfully() throws Exception {
// given
ApplicationUserDetails applicationUser = createApplicationUser();
when(accessControlUtil.getLoggedInUser()).thenReturn(applicationUser);
SomeEntity mockResponse = new SomeEntity();
mockResponse.setAssignee(applicationUser.getUsername());
when(someRepository.findOneById(anyString())).thenReturn(Optional.of(mockResponse));
when(someRepository.save(any(SomeEntity .class))).thenReturn(mockResponse);
// when
someService.submitSomething(new SomeDataDto(SOME_ID, SOME_PARAM)); // A void method
// then
assertNull(mockResponse.getAssignee());
verify(someRepository).save(any(SomeEntity .class));
}