如何让数据源能够测试DAO的类

时间:2016-06-29 15:59:17

标签: java junit jboss mockito jboss-arquillian

我正在寻找一种方法来测试我的Dao课程。

我的一个类获得了这样的数据源:

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?我需要像mockito,jmock,easymock这样的东西吗?此外,运行Junit测试时服务器是否需要运行?或者没有它可以做到这一点吗?

由于

1 个答案:

答案 0 :(得分:1)

您可以使用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生成的代码,而这反过来会跟踪您执行的操作以支持您在测试方法中深入编写的验证方法。 您的UserDAOImpl可能也会对从Connection#prepareStatement(String)获取的PreparedStatement做一些事情,因此还需要模拟它。 请注意,您创建了将自动返回模拟的模拟:

mock(Connection.class, Mockito.RETURNS_DEEP_STUBS);