Easymock期待例外吗?

时间:2014-10-17 09:19:39

标签: java junit easymock

我有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;
}

我需要编写一个测试预期异常场景,如下所示。我怎么写?

2 个答案:

答案 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)方法中,如果参数无效,则应抛出异常。