Java Easymock期望异常?

Java Easymock期望异常?,java,junit,easymock,Java,Junit,Easymock,我有下面的方法 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; } 我需要编写一个测试预期异常场景,如下所示。如何编写?

我有下面的方法

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

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

您模拟数据库连接,并编写两个测试用例。一种是告诉模拟连接返回null,在这种情况下会出现异常(@Test(expect=CustomException.class)),另一种是模拟连接返回虚拟结果,并且测试不会失败,因为没有异常

另一方面,我认为在DAO中包含验证逻辑打破了单一责任原则。我认为底层数据库连接应该抛出异常,或者您应该分离验证逻辑并将其放入void validate(?toValidate)方法中,如果参数无效,该方法应该抛出异常。

如果
String getMsg(String name)
是接口方法,则:

public interface IMsgDAO
{
   // ...
   String getMsg(String name);
   // ...
}  
在犹他州

IMsgDAO dao = EasyMock.createMock(IMsgDAO.class);  
EasyMock.expect(dao.getMsg((String) EasyMock.anyObject())
   .andThrow(new CustomException()) // <---   
   .anyTimes();  
IMsgDAO=EasyMock.createMock(IMsgDAO.class);
expect(dao.getMsg((字符串)EasyMock.anyObject())

.anthrow(新的CustomException())//您想测试此DAO方法还是使用此方法的类?我想测试使用此DAO的类。我想在服务类中模拟此DAO。嗨,Daniel,我想模拟DAO并测试使用此DAO方法的服务方法。然后是重点。另一方面,您不一定需要接口来模拟对象,但是有两个问题:你不能模拟静态或最终,在模拟行为定义中使用匹配器时要注意:你不能混合使用匹配器和常规参数。此外,你还需要在行为定义(录制阶段)和测试之间进行“重播(…)”。