java - 在 Java 中进行单元测试时如何强制调用 SQLException?
问题描述
我在 JUnit 4.xx 上运行 Java 测试。我正在尝试从 try 块中强制运行 SQLException。我以许多不同的方式运行了 Mockito,但我没有得到我想要的结果。
这是我的主要文件:
public boolean close() {
if (connection == null) {
throw new IllegalStateException("Connection never initialized!");
}
try {
connection.close();
return true;
}
catch (SQLException e)
{
LOGGER.logp(Level.INFO, CLASS_NAME, "close", e.getMessage());
return false;
}
}
这是我的测试文件:
@Test
public void testFail2() throws SQLException {
JDBCConnection spyConnect = mock(JDBCConnection.class);
given(spyConnect.getConnection()).willAnswer(invocationOnMock -> new SQLException());
assertFalse(spyConnect.close());
}
总而言之,我如何让 catch 块得到执行,以便为我的整个程序获得 100% 的行覆盖率?我在这里先向您的帮助表示感谢。
解决方案
如果你想让你的模拟抛出异常,你应该使用willThrow
,而不是willAnswer
:
given(spyConnect.getConnection()).willThrow(new SQLException());
推荐阅读
- java - JPA CriteriaQuery 类的“from”方法不接受实体类。引发 IllegalArgumentException
- puppeteer - 在支持方案中登录
- php - json_decode() 在有效 JSON 上返回 NULL,但 json_last_error() 为 0?
- java - JSON 验证在运行时失败,即使测试通过
- appium - org.openqa.selenium.NoSuchElementException:无法通过此策略定位元素:定位器映射:
- jenkins - 无法使用 .bat 文件从 jenkins 中的从站连接到主站
- c# - 记录器未显示在 ASP.NET Core 2.1 应用程序中
- .net - 如何获取用于开发软件的 Visual Studio 版本?
- ruby-on-rails - Rails 在查询期间过滤连接表
- javascript - react-native 获取 api 数组