W poniższym kodzie problem polega na tym, że nie mogę przetestować dao.add() bez używania dao.list(). Size() i na odwrót.Jak przetestować "dodaj" w DAO bez użycia "znajdź" itp.?
Czy to podejście jest normalne czy niepoprawne? Jeśli jest niepoprawny, w jaki sposób można go poprawić?
public class ItemDaoTest {
// dao to test
@Autowired private ItemDao dao;
@Test
public void testAdd() {
// issue -> testing ADD but using LIST
int oldSize = dao.list().size();
dao.add(new Item("stuff"));
assertTrue (oldSize < dao.list().size());
}
@Test
public void testFind() {
// issue -> testing FIND but using ADD
Item item = new Item("stuff")
dao.add(item);
assertEquals(item, dao.find(item.getId()));
}
}
Czy wykonujesz testy integracyjne lub jednostkowe? – davidfrancis
Mówisz mi :) W tym konkretnym przypadku - używanie wyłącznie zdrowego rozsądku wydaje mi się bardziej podobne do testu integracji. Ale wiesz, w końcu chcę tylko upewnić się, że moje DAO działa, to wszystko. – Xorty
Tak, to jest ból. Nie jesteś pewien, czy możesz skończyć z testami jednostkowymi z powodu zależności od dao. Jak działa dao? Osobiście starałbym się uniknąć uzależnienia twojego testu od zewnętrznej bazy danych i próbować odgadnąć lub pozorować warstwę dostępu do bazy danych, jak sugeruje jedna z odpowiedzi. Powiedziawszy, że to nigdy nie jest tak uspokajające jak prawdziwy test integracji zależny od db. – davidfrancis