2016-06-29 34 views
0

我正在尋找一種方法來測試我的Dao類。如何讓數據源能夠測試DAO'S類

我的一個班得到這樣的數據源:

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測試時服務器是否需要運行?還是有沒有辦法做到這一點?

感謝

+0

你可以從http://stackoverflow.com/questions/9807414/dao-unit-testing略知一二 – Wilson

回答

1

您可以使用到的Mockito嘲笑連接要傳遞給你的一個UserDAOImpl的activityList方法如下:

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); 
相關問題