Wal*_*lls 4 java junit easymock
我正在使用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());
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试测试foo该类时,我希望能够测试此DBException.如果我在try/catch(测试中)中调用DAO调用,或者在测试中添加一个抛出,我该如何处理?我知道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){
// ???
}
}
Run Code Online (Sandbox Code Playgroud)
什么是正确的方法来处理expect可能会抛出错误?测试方法throw应该例外,还是应该try/catch使用?expected=EXCEPTION在测试中使用标签是否仍然正确?
以下是我在单元测试中处理异常的方法:
如果您没有明确地测试异常,那么您应该向该方法添加一个throws子句 - 如果抛出异常并且您不希望抛出该异常,则表示测试失败.例如,
@Test
public void testFooNormal() throws DBException{
String key = "test";
String value = "expected";
daoClass daoMock = createMock(daoClass.class);
expect(daoMock.lookup(key)).andReturn(value);
// do an assert on returned value
...
}
Run Code Online (Sandbox Code Playgroud)
如果您正在显式测试异常,那么在您期望抛出的行周围放置一个try-catch(捕获您期望的Exception的最窄版本),然后在catch子句中设置一个boolean并且断言应该打开布尔值.例如,
@Test
public void testFooError(){
String key = "test";
String value = "expected";
boolean exceptionThrown = false;
daoClass daoMock = createMock(daoClass.class);
try{
expect(daoMock.lookup(key)).andReturn(value);
}catch (DBException e) {
exceptionThrown = true;
}
// assert exceptionThrown is true
...
}
Run Code Online (Sandbox Code Playgroud)
这是测试异常的好方法,因为这意味着您不仅要测试抛出正确的异常,还要测试它是否与您期望的行完全相同.如果使用@test(expected = ...),则测试中的另一行可能会抛出该异常,并且测试可能会错误地传递.
| 归档时间: |
|
| 查看次数: |
11399 次 |
| 最近记录: |