我有DAO方法。
public String getMsg(String name){
//get data from database
if db returned value is null then throw exception.
if(returnValue == null){
throw new CustomException("No results");
}
return returnValue;
}
我需要编写一个测试预期异常场景,如下所示。我怎么写?
答案 0 :(得分:2)
如果String getMsg(String name)
是接口方法,则:
public interface IMsgDAO
{
// ...
String getMsg(String name);
// ...
}
在UT
IMsgDAO dao = EasyMock.createMock(IMsgDAO.class);
EasyMock.expect(dao.getMsg((String) EasyMock.anyObject())
.andThrow(new CustomException()) // <---
.anyTimes();
现在调用dao.getMsg("anyString")
会抛出异常
答案 1 :(得分:0)
您模拟了数据库连接,并编写了两个测试用例。在其中您告诉模拟连接返回null,其中您将期望一个异常(@Test(expect = CustomException.class)),以及模拟连接返回虚拟结果的一个,并且测试不会失败,因为没有例外。
另一方面,我认为通过在DAO中包含验证逻辑可以打破单一责任原则。在我看来,底层数据库连接应抛出异常,或者您应该将验证逻辑分离出来并将其置于void validate(?toValidate)方法中,如果参数无效,则应抛出异常。