2016-06-29 3 views
0

Ich bin auf der Suche nach einer Möglichkeit meine Dao Klassen zu testen.Wie bekomme ich eine Datenquelle um die Klassen von DAO testen zu können?

Einer meiner Klassen wird eine Datenquelle wie folgt aus:

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); 
     } 
    } 

}

Dann habe ich die Klasse UserDAOImpl mit der Methode

public List<Activity> activityList(Connection con) 

Wie kann ich die UserDAOImpl testen? Brauche ich etwas wie Mockito, Jmock, Easymock? Muss der Server auch ausgeführt werden, wenn er meinen Junit-Test ausführt? oder gibt es einen Weg, es ohne es zu tun?

Dank

+0

Sie eine Vorstellung bekommen können von http://stackoverflow.com/questions/9807414/dao-unit-testing – Wilson

Antwort

1

Sie Mockito können Sie die Verbindung verspotten, dass Sie auf Ihre UserDAOImpl des activityList Methode sind vorbei wie folgt:

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 

Der Server muss nicht auf Anhieb funktioniert. Wenn Ihr UserDAOImpl die Methoden der Verbindung aufruft, führt er tatsächlich Code aus, der von Mockito erzeugt wurde und der wiederum verfolgt, was Sie ausgeführt haben, um die Verifizierungsmethoden zu unterstützen, die Sie tiefer in die Testmethode (n) schreiben. Es ist wahrscheinlich, dass Ihr UserDAOImpl auch etwas mit dem PreparedStatement tut, das er von Connection # prepareStatement (String) bekommt, also muss er das auch nachahmen. Beachten Sie, dass Sie Mocks erstellen, die zurückkehren wird verspottet automatisch:

mock(Connection.class, Mockito.RETURNS_DEEP_STUBS); 
Verwandte Themen