繁体   English   中英

如何获得一个数据源以能够测试DAO的类

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM