powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / JUnit.Подскажите как правильно написать тест для DAO
6 сообщений из 6, страница 1 из 1
JUnit.Подскажите как правильно написать тест для DAO
    #38496235
justcoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем, здравствуйте. В общем имеется DAO

Код: java
1.
2.
3.
4.
public interface MarkDAO {
    public Mark insertMark(Mark mark);
    public Mark getMarkById(long markId);
}



Пишу для этого дао тест (предварительно создав для тестов отдельный спринговой контекст, который замаплен на тестовую базу). Итак сам тест

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:spring/test-context.xml")
@TransactionConfiguration(transactionManager = "transactionManager")
@Transactional
public class MarkDaoJdbcImplTest {

    @Autowired
    private MarkDAO markDAO;

    @Test
    public void testInsertMark(){
        Mark expectedMark=createTestMark();
        expectedMark=markDAO.insertMark(expectedMark);

        Mark factMark=markDAO.getMarkById(expectedMark.getId());
        assertMarksEquals(expectedMark,factMark);
    }

    @Test
    public void testGetMarkById(){
        Mark expectedMark=createTestMark();
        expectedMark=markDAO.insertMark(expectedMark);

        Mark factMark=markDAO.getMarkById(expectedMark.getId());
        assertMarksEquals(expectedMark,factMark);
    }

    private Mark createTestMark(){
        Mark mark=new Mark();
        mark.setName("Test mark");
        return mark;
    }

    public void assertMarksEquals(Mark expected,Mark fact){
        assertEquals(expected.getName(),fact.getName());
    }
}


В общем не нравится мне то как тут сделано, помимо тупого дублирования оба метода зависят друг от друга.

Есть ли смысл тут писать SQL,что-то типа этого

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
    public void testGetMarkById(){
        Mark expectedMark=createTestMark();
        String sql="INSERT INTO MARK....";
        KeyHolder keyHolder......
        jdbcTemplate.query(sql,createParamsMap(expectedMark),keyHolder,new String[]{"MARK_ID"});
        expectedMark.setId(keyHolder.getLongValue());
        Mark factMark=markDAO.getMarkById(expectedMark.getId());
        assertMarksEquals(expectedMark,factMark);
    }


, ну в общем как правильно (желательно с обоснованием) писать тесты для такого вот случая. Направьте на путь истинный.
...
Рейтинг: 0 / 0
JUnit.Подскажите как правильно написать тест для DAO
    #38496243
WGA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WGA
Гость
justcoder, ну в общем как правильно (желательно с обоснованием) писать тесты для такого вот случая. Направьте на путь истинный.Вы думаете есть единственно правильный путь? ) Я, например, предпочитаю тестировать уровень сервисов, а не DAO. И данные "накидывать" руками, точнее с помощью DbUnit. Возможно, Вам понравится иначе...
...
Рейтинг: 0 / 0
JUnit.Подскажите как правильно написать тест для DAO
    #38496529
пролетевший
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
justcoder, ваш тест проверяет Spring и Hibernate. Совершенно бессмысленно, они покрыты тестами очень хопошо, на все случаи жизни. Единственно что имеет смысл проверять, это насколько правильно данные отображаются в базе. Соответственно, если тестируем чтение то данные вставляем через SQL, если запись то проверяем через select. Это имеет смысл, чтобы проверить не ошиблись ли с мапингом, правильно ли сопоставляются типы ( вроде обрезки времени с типом date ), заполнение коллекций.
Я правда предпочитаю не dbunit ( лень заполнять yaml/xml ), а скриптами. А следующий уровень тестировать подставляя вместо DAO mock объекты.
...
Рейтинг: 0 / 0
JUnit.Подскажите как правильно написать тест для DAO
    #38497044
WGA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WGA
Гость
пролетевшийjustcoder, ваш тест проверяет Spring и Hibernate. Совершенно бессмысленно, они покрыты тестами очень хопошо, на все случаи жизни. Единственно что имеет смысл проверять, это насколько правильно данные отображаются в базе.HQL-запросы в DAO полезно проверить.
...
Рейтинг: 0 / 0
JUnit.Подскажите как правильно написать тест для DAO
    #38497138
justcoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пролетевшийjustcoder, ваш тест проверяет Spring и Hibernate. Совершенно бессмысленно, они покрыты тестами очень хопошо, на все случаи жизни. Единственно что имеет смысл проверять, это насколько правильно данные отображаются в базе. Соответственно, если тестируем чтение то данные вставляем через SQL, если запись то проверяем через select. Это имеет смысл, чтобы проверить не ошиблись ли с мапингом, правильно ли сопоставляются типы ( вроде обрезки времени с типом date ), заполнение коллекций.
Я правда предпочитаю не dbunit ( лень заполнять yaml/xml ), а скриптами. А следующий уровень тестировать подставляя вместо DAO mock объекты.

У меня нету никакого hibernate, я юзаю голый sql обернутый в springJdbcTemplate
...
Рейтинг: 0 / 0
JUnit.Подскажите как правильно написать тест для DAO
    #38497313
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1)грузите в in-memory базу порцию тестовых данных (1 строка) используя DBunit в тесте делаете getX() сравниваете ожидаемое с полученным.
2) в тесте делаете insertX(), сравниваете текущее состояние базы и ожидаемым(xml файл с 1 строчкой) используя DBunit.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / JUnit.Подскажите как правильно написать тест для DAO
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]