Как поймать тестами такой баг?
От: MozgC США http://nightcoder.livejournal.com
Дата: 03.02.10 17:18
Оценка: 1 (1)
Здравствуйте,
Сегодня тесты выявили такой баг: при сохранении нового клиента, вместо того, чтобы ему выставить некоторую цену доставки груза по умолчанию, эта цена доставки груза выставлялась вообще всем клиентам. Грубо говоря код такой был:

...
if (customer.ID == 0)
{
    using (var transactionScope = new TransactionScope())
    {
        CustomerAccessor.Insert(customer);
        CustshipmentsAccessor.SetShipmentPricesForAllCustomers(...); // а надо было CustshipmentsAccessor.SetShipmentPricesForCustomer(...);

        transactionScope.Complete();
    }
}
...

Т.е. не ту функцию вызывал... К счастью в релиз это не успело уйти.

А обнаружилось это почти случайно, какого-то специального теста на этот случай не было, но так как всем клиентам выставились цены доставки, то слетели пара других тестов. Ну так и обнаружил баг.
Т.е. получается, то, что тест был плохо изолирован (не в отдельной транзакции я его выполнял), сыграло в данном случае мне на руку. А то вообще бы не обнаружил проблему.

Но вопрос в том — как лучше тестировать чтобы такая ошибка обнаружилась. Ведь если для каждой функции писать кучу тестов и код, который проверяет как изменилось состояние БД (не затронулись ли другие строки и таблицы), то с ума можно сойти (я все-таки не маньяк-тестировщик, тесты в основном пишу только на наиболее критичные для бизнеса, либо сложные функции). Можно ли как-то проще?
http://www.brainbench.com/images/certlogo/color/mastercert/csharp50.gif
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.