|
как писать unit-тесты ?
|
|||
---|---|---|---|
#18+
Есть БД с некой серверной логикой. Надо эту логику тестить. Как правило это пакет с процедурами. Вся разработка, естественно, с системой контроля версий. Есть новая версия пакета. Предположим изменились процедуры УправлениеКонтрагентами.УдалитьКонтрагента(). УправлениеКонтрагентами.УдалитьДоговорыКонтрагента(). Процедура УдалитьКонтрагента() - удаляет заданного контрагента - удаляет договоры заданного контрагента (вызывается УдалитьДоговорыКонтрагента() ) - синхронизирует некую кеш-таблицу с отражением текущих балансов (вызывается СинхронизацияБалансов) Процедура УдалитьДоговорыКонтрагента() - удаляет заданного контрагента - удаляет договоры заданного контрагента Процедура СинхронизацияБалансов() - запускает один SQL запрос Итак вопросы: вопрос 1 . Тестовая среда (тестовая база) должна быть чистой? То есть перед вызовом теста каждого юнита надо а. иметь чистую среду б. затем в модуле ПодготовкаКТесту() заполнить все таблицы, учавствующие в тестировании? в. затем запустить тест? г. затем в модуле ОчисткаПослеТеста() очистить все таблицы, учавствующие в тестировании юнита? То есть в процедуре, которая будет тестить юнит УдалитьКонтрагента(), необходимо: 1. вставить инсертами контгагентов, договоры. 2. запустить тест 3. проверить, что контрагента нет и договоров нет 4. проверить что после синхронизации балансов нет баланса удаленного контрагента. так? вопрос 2 . Считается ли правильным тестом одного родительского юнита, который (юнит) вызывает другие юниты, считать протестированными эти подчиненные юниты? То есть в данном примере если мы делаем тест процедуры УдалитьКонтрагента(), который внутри себя вызывает УдалитьДоговорыКонтрагента, то надо ли делать отделоьный тест для УдалитьДоговорыКонтрагента ? Короче, есть набор процедур, которые вызывают друг друга (обычно не в виде графа, а в виде дерева). Надо ли писать тест для каждой из них? Надо ли перед вызовом каждого юнита считать, что база чистая (за исключением совсем общих вещей типа справочников ВидыДоговоров, его очевидно, заполнять перед каждым юнитом не стоит). ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2010, 12:35 |
|
как писать unit-тесты ?
|
|||
---|---|---|---|
#18+
брадобрей Короче, есть набор процедур, которые вызывают друг друга (обычно не в виде графа, а в виде дерева). Надо ли писать тест для каждой из них? Надо ли перед вызовом каждого юнита считать, что база чистая (за исключением совсем общих вещей типа справочников ВидыДоговоров, его очевидно, заполнять перед каждым юнитом не стоит). депендс он.. как гворится.. 1. не совсем понял в чем прикол "чистой" базы в данном случае? Если у вас при тестировании будет 2-3 контрагента и 5-6 договоров к ним, вы это протестите и скажете - все зашибись работает... а потом на продакшене, где этих контагентов 1 миллион, к примеру, процедурка у вас вообще завалится по нехватке памяти... или на тесте у вас все выполнится за секунду, а на продакшене будет выполняться неделю... 2. Если с помощью вызова родительской процедуры вы полностью покроете тестами вызов дочерней (к примеру, перебираются все возможные комбинации параметров вызова дочерней процедуры), то отдельно дочернюю можно не тестить... ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2010, 13:14 |
|
|
start [/forum/topic.php?fid=36&tid=1554827]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
29ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
others: | 258ms |
total: | 373ms |
0 / 0 |