Персональная страница Федора Езеева
Главная
Download
Ссылки
MS SQL
Обмен данными
Новости
Статьи
О себе
Крупные разделы...
Коллективная разработка
1С++, OOP, XP
FuncTest
FAQ
Структура 1cv7.md
Назад Содержание Далее

Юниттестирование под 1С.

Для юниттестирования кода 1С можно использовать классы, идущие в поставку FuncTest начиная с версии 0.11.0. Эти классы находятся в папке FuncTest_Classes\UnitTests.

Пока нет полноценной документации - приведу несколько простейших примеров использования этих классов.

Для начала совсем простой пример. Допустим, мы хотим проверить, насколько правильно работает в 1С операция сложения. Вдруг на 26-м релизе 3+4 будет возвращать 8?
Создаем класс-тест.
в defcls пишем:
класс ПроверкаСложения = ПроверкаСложения.txt : ТестовыйСлучай
{
	void Тест_ТриПлюсЧетыре();
};
В реализации класса пишем
Функция Сам(Конт) Возврат Конт; КонецФункции

Процедура Тест_ТриПлюсЧетыре() Экспорт
	Сам(Контекст).ПроверитьРавенство(3+4, 7);
КонецПроцедуры
В Предприятии открываем обработку ЗапускВсехТестовКонфигурации.ert, ставим там галочку в нужном месте, жмем "Запустить".

Ключевой строкой является вызов метода ПроверитьРавенство(), который определен в классе ТестовыйСлучай. Таких "Проверочных" методов в этом классе много, и в англоязычных языках программирования они все имеют в своем названии слово Assert. Поскольку Тест - это проверка, то эти методы и занимаются этими самыми проверками.

Теперь оглянемся на 1С. В первую очередь 1С - это База данных. И часто нужно тестировать корректность изменения этих самых данных.
И здесь возникает два важных нюанса.

  1. Операции с данными - самые медленные операции на свете.
  2. Тесты должны быть независимыми друг от друга. В идеале - каждый тест должен быть вообще самодостаточен. Это неизбежно приводит к тому, что каждый тест должен сначала привести БД в нужное ему состояние (см. п 1 про скорость), а потом еще и зачистить за собой (опять п.1 про скорость).
Для решения проблемы быстродействия, а так же для избавления программиста от необходимости писать код "зачистки" базы для каждого теста - создан класс ТестовыйСлучайСДанными, в котором методы Сетап() и Сброс() определены таким образом, что... ну кому интересно - сам посмотрит и все увидит, там примитивно.

В сухом остатке: если в тестовом методе создаются какие-то данные, то наследовать такой класс-тестовый случай нужно от класса ТестовыйСлучайСДанными.

Назад Содержание Далее
Rambler's Top100 1C:TOP-100

© 1998-2004 Fedor Ezeev.

Last updated: 2005-09-15