Cod*_*dek 6 unit-testing exception
看看我们的单元测试的代码覆盖率,我们非常高.但最后几个%是棘手的,因为他们中的很多人正在捕捉像数据库异常这样的东西 - 在正常情况下这些都不会发生.例如,代码可以防止字段太长等,因此唯一可能的数据库异常是,如果数据库被破坏/关闭,或者模式在我们的脚下被更改.
那么模仿对象以便抛出异常的唯一方法是什么?这似乎有点无意义.也许最好不接受100%的代码覆盖率?
谢谢,丹
通常,当遇到低级异常(例如 Java 中的 IOException 或 SQLException)时,我会将它们包装到扩展 RuntimeException 的异常中。我觉得测试这种行为非常重要,因为否则很可能会意外吞掉异常。
因此,如果您在引发低级异常时确实执行了某些操作,我建议您测试它们。
编辑:添加示例。
public void store(User user) {
try {
userDao.store(user);
} catch (IOException e) {
// Logging, perhaps some logic.
throw new ServiceException(e);
}
}
@Test(expected = ServiceException.class)
public void Store_Fail() {
UserDao userDaoMock = createMock(UserDao.class);
User user = // Create test user.
userDaoMock.store(user);
replay(userDaoMock);
userService.store(user);
verify(userDaoMock);
}
Run Code Online (Sandbox Code Playgroud)
这里没有太多需要测试的地方,但是如果逻辑需要抛出 ServiceException 为什么不测试它呢?
| 归档时间: |
|
| 查看次数: |
490 次 |
| 最近记录: |