Testy jednostkowe klasy która korzysta z baz danych.

0

Cześć,
mam klase która kkorzysta z bazy dancyh, chciałbym ja przetestować. Wiem że do takich testów służą testy integracyjne, natomiast czy jest mozliwość stworzenia jakiejś testowej bazy dancyh lub po prostu ją czymś zastąpić żeby sprawdzić czy klasa działa poprawnie i czy zwraca oczekiwane wartości.

Kod który chę przetestować:
Czy jest mozliwośc zastąpienia w testach MoneyRepository aby sprawdzić poprawność działania kodu ?
(Uruchamianie co chwilę aplikacji i debugowanie jej jest zbyt czasochłonne)

class Service {


    private Map<String, Double> sumOfOperationsMap(MoneyRepository moneyRepository) {
        List<MoneyOperations> moneyOperationsList = (List<MoneyOperations>) moneyRepository.findAll();
        Map<String, Double> calculationMap = new HashMap<>();
        for (MoneyOperations moneyOperations : moneyOperationsList) {

            if (!calculationMap.containsKey(moneyOperations.getName())) {
                calculationMap.put(moneyOperations.getName(), moneyOperations.getAmount());
            } else if (calculationMap.containsKey(moneyOperations.getName())) {
                double value = +moneyOperations.getAmount();
                calculationMap.put(moneyOperations.getName(), value);
            }

        }
        return calculationMap;
    }

     List<CalculationValues> calculationValuesList(MoneyRepository moneyRepository) {
        int index = 1;
        Map<String, Double> map = sumOfOperationsMap(moneyRepository);
        List<CalculationValues> list = new LinkedList<>();
        Set set = map.entrySet();
        Iterator iterator = set.iterator();
        while (iterator.hasNext()) {
            Map.Entry entry = (Map.Entry) iterator.next();
            list.add(index, new CalculationValues(entry.getKey().toString(), (double) entry.getValue()));
            index++;
        }

        return list;
    }
}
2

A co za problem:

  1. Zrobić sobie testową klasę która implementuje ten sam interfejs MoneyRepository i np. ma dane hardkodowane po prostu?
  2. Zrobic mocka tego repozytorium?
  3. Odpalic jakieś hsql in memory db i się do niego w teście podpiąć?
0

Bardzo łatwo możesz też zrobić baze danych na HashMapie:

public class InMemoryRepository<T> implements Repository<T> {

    private ConcurrentHashMap<UUID, T> map = new ConcurrentHashMap<>();

    @Override
    public void save(UUID uuid, T t) {
        map.put(uuid, t);
    }

    @Override
    public Option<T> findOne(UUID uuid) {
        return Option.of(map.get(uuid));
    }

    @Override
    public List<T> findAll() {
        return List.ofAll(map.values());
    }

    @Override
    public void delete(UUID uuid) {
        map.remove(uuid);
    }

    @Override
    public void update(UUID uuid, T t) {
        map.put(uuid, t);
    }

}

1 użytkowników online, w tym zalogowanych: 0, gości: 1