Mockito : so testen Sie, meine Dao mit Spott?
Ich bin Neuling auf junit und TDD. Ich bin der Planung bis zur Nutzung Mockito testen, mein dao.
Dao-Schnittstelle:
package com.test.SpringApp.dao;
import java.util.List;
import com.test.SpringApp.bean.Account;
import com.test.SpringApp.bean.Person;
public interface TestDao {
List<Account> getAccountDetails(int account_id);
Person getPersonDetails(int person_id);
}
DaoImpl Class Code:
package com.test.SpringApp.dao;
import java.util.ArrayList;
import java.util.List;
import javax.sql.DataSource;
import org.apache.log4j.Logger;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.support.rowset.SqlRowSet;
import com.test.SpringApp.bean.Account;
import com.test.SpringApp.bean.Person;
public class TestDaoImpl implements TestDao {
private static final Logger logger = Logger.getLogger(TestDaoImpl.class);
private JdbcTemplate jdbcTemplate;
public void setDataSource(DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
@Override
public List<Account> getAccountDetails(int account_id) {
try {
String query = "select * from account where account_id=?";
SqlRowSet rowset = jdbcTemplate.queryForRowSet(query,account_id);
Account account = null;
List<Account> accountDetails = new ArrayList<Account>();
while (rowset.next()) {
account = new Account();
account.setAccountId(rowset.getInt("accountid"));
account.setAccountType(rowset.getString("accounttype"));
accountDetails.add(account);
}
return accountDetails;
} catch (Exception e) {
//TODO: handle exception
logger.info("Error :" + e.getMessage());
return null;
}
}
private Person getPersonDetails(int person_id) {
try {
String query = "select * from Person where person_id=?";
SqlRowSet rowset = jdbcTemplate.queryForRowSet(query,person_id);
Person person = null;
while (rowset.next()) {
person = new Person();
person.setName(rowset.getString("name"));
stage.setNumber(rowset.getInt("number"));
}
return person;
} catch (Exception e) {
//TODO: handle exception
logger.info("Error :" + e.getMessage());
return null;
}
}
}
Ich bin mit den oben genannten interface und die Klasse zu erhalten, Konto und person details aus der Datenbank. Könnte jemand bitte erklären Sie mir, wie Sie schreiben von Testfällen für die oben genannten dao-interface und Klasse mit junit und Mockito.
Hilfe wäre sehr geschätzt 🙂
- Testen Sie Ihre DAO sinnvoll, wirst du eine Datenbank benötigen. Es ist am besten, um eine kleine in-memory-Datenbank für diesen, da sonst Ihre tests einfach zu lange dauert und zu umständlich einzurichten. Ich habe verwendet, H2 für diese erfolgreich in der Vergangenheit. Viel Glück.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es scheint, dass Sie missverstanden das Konzept der Spott in tests.
Nehme an, Sie haben eine Klasse
A
und eine KlasseB
. KlasseA
hat eine MethodemA()
verwendet die MethodemB()
aus der Klasse B, die für seine Funktionalität.Wollen Sie nun testen
mA()
, dannmA()
ruftmB()
. In den meisten Fällen ist dies kein problem, aber davon ausgehen, ClassB
ist eine DAO-undmB()
ist eine Funktion, die die Abfrage der Datenbank. Dann benötigen Sie eine Datenbank, um zu testenmA()
. Nehmen wir jetzt an, dass Sie bereits testsmB()
und Sie nur testen wollenmA()
. So können Sie ersetzenB
durch ein mockB´
, dass "simuliert"mB()
.In deinem Fall
B
istTestDao
/TestDaoImpl
. Also, wenn Sie wollen, zu verspottenTestDao
, so müssen Sie something else (A
) zu testen, weil Sie kann nicht testen verspottet Klasse!B
im test-Methode? WennmA
ruft und es ruftmB
mitB
's Objekt. Wie kann Objekt B inmA
wird verspottet?A
hat ein Feldprivate B b;
halten, dass die Instanz vonB
. UndA
hat ein setter für das Feldb
.