[英]Mockito Checked exception is invalid for this method
I'm getting the error Checked exception is invalid for this method
when trying to use this mock: 尝试使用此模拟程序时,出现错误
Checked exception is invalid for this method
:
InitialContext mockContext;
mockContext = mock(InitialContext.class);
when((DataSource) mockContext.lookup("java:comp/env/jdbc/foo")).thenThrow(new ConnectionFactoryException("test")); // <-- Fails on this line
@Test
public void shouldThrowExceptionIfDataSourceDoesNotExist() throws ConnectionFactoryException {
assertThatExceptionOfType(ConnectionFactoryException.class)
.isThrownBy(() -> { new DataSourceFactory(mockContext).getDataSource("foo"); })
.withMessage("Unable to find jdbc/foo");
}
Class I'm trying to test: 我要测试的课程:
public class DataSourceFactory {
// Dependencies to be injected
private InitialContext context;
public DataSourceFactory(InitialContext context) throws ConnectionFactoryException {
if(context == null) {
throw new ConnectionFactoryException("context can't be null");
}
this.context = context;
}
public DataSource getDataSource(String dataSourceName) throws ConnectionFactoryException {
if(dataSourceName == null) {
throw new ConnectionFactoryException("dataSourceName can't be null");
}
// Ensure we have the correct syntax for the datasource name
if(!dataSourceName.startsWith("jdbc/")) {
dataSourceName = "jdbc/" + dataSourceName;
}
try {
System.out.println("java:comp/env/" + dataSourceName);
DataSource dataSource = (DataSource) context.lookup("java:comp/env/" + dataSourceName);
return dataSource;
} catch (NamingException e) {
throw new ConnectionFactoryException("Unable to find " + dataSourceName, e);
}
}
}
I know I've read that I shouldn't mock objects I don't own, but I can't figure out how to test the getDataSource()
method without mocking InitialContext
. 我知道我已经读过我不应该模拟我不拥有的对象,但是我不知道如何在不模拟
InitialContext
情况下测试getDataSource()
方法。
lookup
indeed doesn't throw a ConnectionFactoryException
- your code does. lookup
确实不会引发ConnectionFactoryException
您的代码会引发。 Instead, you should throw the correct exception - a NamingException
, and test that your code handles it as expected (ie, throws up a ConnectionFactoryException`): 相反,您应该抛出正确的异常
NamingException
,并测试您的代码是否按预期处理了该异常(即,抛出ConnectionFactoryException`):
when(mockContext.lookup("java:comp/env/jdbc/foo"))
.thenThrow(new NamingException("test"));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.