我模拟了 QueryService,通过 when/doReturn 为查询服务中的函数设置返回值, 并在我运行测试时发现
ResultDTO<ResponseDTO> result
为空。
我是单元测试的新手,所以不确定哪一部分出了问题。
这是我的课程:
package com.infrastructure.api.acl;
@Service
public class ObjectiveClass {
@Autowired
private QueryService queryService;
public ResultDTO<ResponseDTO> doCoolThings(Request request) {
ResultDTO<ResponseDTO> result;
QueryRequest queryRequest = JSON.parseObject(request.getQueryString(), QueryRequest.class);
if (conditions) {
result = queryService.doSomeThing(queryRequest);
} else {
// ... throw new Exception();
}
if (result == null) {
// ... throw new Exception();
}
return result;
}
}
我的测试班:
package com.infrastructure.api.acl;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.powermock.modules.junit4.PowerMockRunner;
import static org.mockito.ArgumentMatchers.*;
@RunWith(PowerMockRunner.class)
public class ObjectiveClassTest {
@Mock
private QueryService queryService;
@InjectMocks
private ObjectiveClass objectiveClass;
@Test
public void testDoSomeThingWithFailedResponse_ShouldReturnFailedResultDTO() {
this.setupReturnValue(false);
ResultDTO<ResponseDTO> result = objectiveClass.doCoolThings(this.getRequestDTO());
Assert.assertFalse(result.isSuccess());
}
private Request getRequestDTO() {
Request result = new Request();
result.setAbcd("abcd");
// .. result.setParam
return result;
}
public void setupReturnValue(boolean success) {
if (success) {
Mockito.when(queryService.doSomeThing(any(QueryRequest.class))).thenReturn(this.getResultDTO(true));
} else {
Mockito.when(queryService.doSomeThing(any(QueryRequest.class))).thenReturn(this.getResultDTO(false));
}
}
private ResultDTO<ResponseDTO> getResultDTO(boolean success) {
ResponseDTO response = this.getResponseDTO();
if (success) {
response.setSuccess(true);
response.setErrorCode(0);
} else {
response.setSuccess(false);
response.setErrorCode(999);
}
return response.isSuccess() ? ResultDTO.success(response) :
ResultDTO.fail(response.getErrorCode(), response.getErrorMessage(), response);
}
private ResponseDTO getResponseDTO() {
ResponseDTO result = new ResponseDTO();
result.setAbc("abc")
// .. result.setSomething()
return result;
}
}
我试着补充
@Spy
private ResultDTO<ResponseDTO> response = new ResultDTO<>();
但是当我在调试模式下运行测试时它仍然为空。 谢谢