Testowanie repozytoriów/dao

Odpowiedz Nowy wątek
2016-06-22 11:26
0

Witajcie,
Ciąg dalszy mojej przygody z testowaniem. Zrobiłem trochę refactoringów w moim projekcie i powstała klasa taka jak poniżej.

public class ItemLevelRepositoryImpl extends AbstractRepository<ItemLevel> implements ItemLevelRepository {

    public ItemLevelRepositoryImpl(DatabaseHelper databaseHelper) {
        super(databaseHelper);
    }

    @Override
    public List<ItemLevel> findByItemName(String name) {
        return getDatabaseHelper().select("SELECT id, itemName, level, damage FROM ItemLevel WHERE itemName = ?",
                new ItemLevelRowMapper(), name);
    }

    @Override
    public ItemLevel findById(Integer id) {
        return getDatabaseHelper().selectSingle("SELECT id, itemName, level, damage FROM ItemLevel WHERE id = ?",
                new ItemLevelRowMapper(), id);
    }

    @Override
    public void delete(ItemLevel itemLevel) {
        getDatabaseHelper().update("DELETE FROM ItemLevel WHERE id = ?", itemLevel.getId());
    }

    @Override
    public void persist(ItemLevel entity) {
        getDatabaseHelper().update("INSERT INTO ItemLevel (itemName, level, damage) VALUES (?, ?, ?)",
                entity.getItemName(), entity.getLevel(), entity.getDamage());
        entity.setId(selectLastInsertId());
    }

    @Override
    public void update(ItemLevel entity) {
        getDatabaseHelper().update("UPDATE ItemLevel SET itemName = ?, level = ?, damage = ? WHERE id = ?",
                entity.getItemName(), entity.getLevel(), entity.getDamage(), entity.getId());
    }

    protected static class ItemLevelRowMapper implements DatabaseHelper.RowMapper<ItemLevel> {
        @Override
        public ItemLevel map(ResultSet resultSet) throws SQLException {
            ItemLevel itemLevel = new ItemLevel();
            itemLevel.setId(resultSet.getInt("id"));
            itemLevel.setItemName(resultSet.getString("itemName"));
            itemLevel.setLevel(resultSet.getInt("level"));
            itemLevel.setDamage(resultSet.getFloat("damage"));
            return itemLevel;
        }
    }

}

Jak widać w klasie nie ma żadnej logiki.
Powinienem do niej pisać unit testy?
Jak tak to jakie?
Sprawdzające kolejność parametrów?

Pozdrawiam

Pozostało 580 znaków

2016-06-22 11:41
0
  1. Czemu nie użwasz JPA?
  2. Czemu nie używasz SpringData?
  3. Czemu przynajmniej nie masz GenericDao?

Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...

Pozostało 580 znaków

2016-06-22 11:52
0
  1. Nie chce dołączać do malutkiego pluginu wielkiego JPA
  2. Nie chce dołączać do malutkiego pluginu wielkiego SpringData
  3. Trzeba napisać, chodzi mi chwilowo o ten kod który mam

Pozostało 580 znaków

2016-06-22 12:22
1

Możesz stworzyć bazę danych w pamięci (np. HyperSQL) i użyć DBUnit do testowania. Nie wiem czy to jeszcze testy jednostkowe czy już tylko funkcjonalne/integracyjne, ale to chyba najmniejsza rzecz jaką można sensownie testować w takim DAO.

edytowany 1x, ostatnio: caer, 2016-06-22 12:28
Co ci daje DBUnit podczas testowania? - Szczery 2016-06-22 13:44
łatwiejszy config i asercje choćby - caer 2016-06-22 13:56

Pozostało 580 znaków

2016-06-22 13:06
Swr
0

Oczywiscie nalezy pamietac, ze bez JPA/Hibernate moze byc ciezko z dialektami baz.

HSQL może emulować inne dialekty - caer 2016-06-22 13:09

Pozostało 580 znaków

2016-06-22 19:37
0

Dokończyłem mój maluśki projekt, poniżej link do jego githuba.
Co poprawić w testach?

https://github.com/Zaprogramowany27/sword-levels

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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