【发布时间】:2013-03-01 16:29:45
【问题描述】:
我正在使用 EasyMock 创建一些 junit 测试用例。到目前为止,我期望返回 POJO 的类是有意义的,但我应该如何处理本身可能引发异常的 DAO 对象。我的测试用例是检查 DAO 遇到问题时抛出的预期异常。使用 EasyMock 我尝试模拟 DAO 对象(从 foo 类测试),处理较低级别 DAO 异常的正确方法是什么。
类/简单调用的示例如下:(假设所有 getter/setter/构造函数都有效且存在)
public class foo{
private daoClass dao = daoClass.getInstance();
public String getValueFromDB(String key) throws DBException{
return dao.lookup(key);
}
}
public class daoClass{ //singleton DAO
public daoClass getInstance(){
//singleton access here
}
public String lookup(String key) throws DBException{
try{
//DB LOGIC
}
catch(Exception e){
throw new DBException(e.getMessage());
}
}
}
当我尝试测试 foo 类时,我希望能够测试此 DBException。我该如何处理这个问题,我应该在 try/catch 中(在测试中)包围 DAO 调用,还是在测试中添加 throws?我知道expected=DBException 会通过测试,但如果发生这种情况,您应该如何处理任意数量的内部异常?
测试代码示例:
@Test(expected=DBException.class)
public void testFooError(){
String key = "test";
String value = "expected";
daoClass daoMock = createMock(daoClass.class);
try{
expect(daoMock.lookup(key)).andReturn(value);
} catch (DBException e){
// ???
}
}
当expect 可能引发错误时,正确的处理方法是什么?测试方法throw 应该例外,还是应该使用try/catch?在测试中使用expected=EXCEPTION标签仍然正确吗?
【问题讨论】: