[英]How to get a Datasource to be able to test DAO'S classes
我正在寻找一种测试我的道课的方法。
我的一个班级得到了这样的数据源:
public class OrderEJB implements OrderEjbLocal{
@Resource(mappedName = "java:jboss/datasources/MyDS")
private DataSource dataSource;
@Inject
@DataAccessObject
private UserDAO userDAO;
@Override
public List<Activity> activityList() {
try (Connection connection = dataSource.getConnection();) {
return this.userDAO.findAllActivities(connection);
} catch (SQLException e) {
log.error("error");
throw new RuntimeException(e);
}
}
}
然后我有类UserDAOImpl与方法
public List<Activity> activityList(Connection con)
如何测试UserDAOImpl? 我是否需要诸如嘲笑,jmock,easymock之类的东西? 另外,在运行Junit测试时是否需要运行服务器? 还是有没有办法做到这一点?
谢谢
您可以使用Mockito模拟传递给UserDAOImpl的activityList方法的Connection,如下所示:
UserDAOImpl testInstance = ...; // Not sure how you do this
Connection mockedConnection = mock(Connection.class);
// Business method
testInstance.activityList(mockedConnection);
// Asserts
verify(mockedConnection).prepareStatement("select * from dual"); // Or whatever it is that you need to verify
服务器根本不需要运行。 当您的UserDAOImpl调用Connection上的方法时,它实际上是在执行Mockito生成的代码,进而跟踪您为支持在测试方法中更深入地编写的verify方法而执行的操作。 您的UserDAOImpl也可能会对从Connection#prepareStatement(String)获得的PreparedStatement做一些事情,因此也需要对其进行模拟。 请注意,您创建的模拟将自动返回模拟:
mock(Connection.class, Mockito.RETURNS_DEEP_STUBS);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.