【发布时间】:2018-02-27 19:41:00
【问题描述】:
我想测试当我调用这样的方法时是否引发了我的自定义异常:
private MyObject queryDatabase(String request, String end){
HttpEntity myEntity = new NStringEntity(request, ContentType.APPLICATION_JSON)
Response response = restClient.performRequest("GET", end,Collections.emptyMap(), myEntity)
MyObject myObject = mapper.readValue(response.getEntity().getContent(), MyObject.Class);
if(myObject.getFunctions().isEmpty()){
throw new EmptyResultException("Empty result");
}
return myObject;
}
我的EmptyResultException班级:
@ResponseStatus(value=HttpStatus.NO_CONTENT)
public Class EmptyResultException() extends RuntimeException(){
...
}
我刚开始使用 JUnit,我已经尝试过:
@Mock MyService myservice;
@Test(expected=EmptyResultException.class)
public void shouldReturnException() {
when(myService.queryDatabase(anyString(),anyString())).thenReturn(new MyObject());
}
它不工作。我想尝试的行为是private 方法。看来我应该在这种情况下使用 Powermock。但是,我读过测试private 方法不好,所以我想将我的方法更改为public。有什么帮助吗?
编辑:我的完整实现:
我有一个 Restcontroller :
@RestController
@RequestMapping...
public class MyController {
@Autowired
MyService myService;
@RequestMapping...
public MyObject findObject(@Valid DtoParameters parameters){
return myService.executeQuery(parameters);
}
}
在 myService 类中:
@Service
public class MyService{
public MyObject executeQuery(DtoParameters parameters){
return
queryDatabase(parameters.buildRequest(),parameters.buildEnd());
}
}
【问题讨论】:
-
私有方法
queryDatabase()将作为调用方法的一部分进行测试(我假设它是公共的)。您可以简单地在调用方法中验证响应。 -
你是在测试
MyService,还是在嘲笑它?你不能同时做这两件事。 -
我正在测试我的服务在返回空对象时是否抛出异常。我做错了吗?
-
@user2004685 是的,调用方法是公开的。您能否通过简单地验证调用方法中的响应来解释更多含义?
-
@John 您能否在此处包含您的
public方法的实现?
标签: java spring junit powermockito