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

FuncTest. Документация.

Пример работы с FuncTest.

Для начала маленькое ТЗ. Нам нужна возможность заводить приходные накладные, которые при проведении будут формировать проводку Дт 41 Кт 60 на сумму 5/6 от суммы накладной, и Дт 19 Кт 60 на сумму 1/6 от суммы накладной.

Для начала создадим место для хранения данных. FuncTest нам в этом не помошник. Создаем пустую конфигурацию. Создаем план счетов, счета 19, 41 и 60. Создаем документ бухучета "ПриходнаяНакладная" с единственным реквизитом шапки "Сумма".

На этой стадии мы уже можем использовать TDD (Test Driven Development, Разработка, направляемая тестами). И тут мы будем использовать FuncTest. Идем на страничку install.html, читаем, устанавливаем FuncTest для нашей тестовой БД.

В качестве проверки пытаемся запустить Test Brouser.ert. Должно открыться примерно такое окно.

Теперь нам нужно создать место (каталог) для хранения наших тестов. Это можно сделать прямо из окна Test Brouser. Для перехода по каталогам можно просто щелкать по ним мышкой, для создания нового каталога служит кнопка "+Кат". Я люблю хранить тесты в отдельной папке внутри каталога тестируемой БД. Еще одна подсказка: скоро тестов будет много, так что лучше сразу в папке для тестов создать подпапку. Там и будем развлекаться.

Теперь мы должны создать первый тест. Создадим тестируемый объект, то есть приходную накладную. FuncTest создавать документы не умеет - воспользуемся стандартными возможностями 1С (журналом). Сумму я указал в 120 сам не знаю чего (для простоты считаю, что это рубли), чтобы удобнее было делить на 6. Провожу документ.

Теперь самое время записать свои ожидания для этого документа. Мы ожидаем, что этот документ создаст проводку Дт41 Кт60 на 100 рублей и Дт19 Кт60 на 20 рублей.

Возвращаемся в TestBrouser, добавляем тест (кнопка "Доб" рядом со списком тестов), задаем тесту какое-нибудь имя (у меня - "Прих. накл. №1"). Мы должны указать, что мы тестируем: в соответствующем поле выбираем "Проводки документа", в поле "Объект тестирования" выбираем нашу приходную накладную.

Теперь запишем ожидания. в таблицу "Ожидание текущего теста". Для начала нам нужно задать структуру колонок этой таблицы. Проще всего это сделать с помощью кнопки "Из объекта". Имена колонок критичны для FuncTest'а, поэтому поначалу я рекомендую пользоваться именно этой возможностью. Однако никто не мешает добавлять и удалять колонки с помощью кнопок "Доб. кол." и "Уд. кол.".

Поскольку в настоящий момент наша приходная накладная не создает ни одной проводки - и в таблице ожиданий нет ни одной строки. С помощью кнопки "Доб. стр." добавим одну строку. Теперь мы можем указать коды счетов дебета и кредита, а так же сумму. Делается это простым двойным кликом на соответствующих ячейках. Количество, ВалСумма и Валюта нас сейчас не волнуют, поэтому мы можем на выбор: оставить все как есть или удалить эти колонки из таблицы ожиданий. Мне больше нравится удалять колонки. Необходимо учесть, что коды счетов должны быть строковыми.

Для разнообразия вторую строку добавим, скопировав предыдущую. После копирования нам нужно подправить значения ячеек "СчетДТ" и "Сумма".

Ожидания готовы. Мы можем тут же убедиться в несоответствии конфигурации нашим ожиданиям, нажав на кнопку "Test".

У нас есть неработающий тест, чиним его. Идем в модуль проведения, пишем там такой код:

Процедура ОбработкаПроведения()

	Операция.НоваяПроводка();
	Операция.Дебет.Счет=СчетПоКоду("41");
	Операция.Кредит.Счет=СчетПоКоду("60");
	Операция.Сумма=100;
	
	Операция.НоваяПроводка();
	Операция.Дебет.Счет=СчетПоКоду("19");
	Операция.Кредит.Счет=СчетПоКоду("60");
	Операция.Сумма=20;

КонецПроцедуры
Сохраняемся, перепроводим накладную, жмем кнопку "Test" ... Я в запале забыл добавить строку
Операция.Записать();
, и FuncTest любезно сообщил мне, что я чего-то недоделал. Исправляюсь, перепровожу накладную, "Test", вижу "ОК".

Понятно, что я сильно упростил себе задачу - с единственным тестом я могу не обращать внимания на реквизит "Сумма", указав в модуле те цифры, которые от меня и ожидались. Но это вполне в духе TDD. И мы увидели, почему это оправданно: такой подход позволяет изолировать ошибки общей структуры модуля, без отвлечения на цифры.

Рисуем второй тест. На этот раз сумма накладной будет 300 рублей, и этот тест не пройдет. Причем если я поменяю в модуле 100 на 250, а 20 на 50, то перестанет проходить уже первый тест. Нужно использовать реквизит "Сумма" из шапки приходной накладной.

Процедура ОбработкаПроведения()

	Операция.НоваяПроводка();
	Операция.Дебет.Счет=СчетПоКоду("41");
	Операция.Кредит.Счет=СчетПоКоду("60");
	Операция.Сумма=Сумма*5/6;
	
	Операция.НоваяПроводка();
	Операция.Дебет.Счет=СчетПоКоду("19");
	Операция.Кредит.Счет=СчетПоКоду("60");
	Операция.Сумма=Сумма/6;
	
	Операция.Записать();

КонецПроцедуры

Для того, чтобы автоматизировать процесс перепроведения документов и запуска всех тестов сразу - используется Tester.ert. Выбираем каталог (чтобы не выбирать его каждый раз - используйте возможность сохранения настройки отчета), взводим все галочки, жмем "Сформировать".

ОК.
Времени потрачено: 0.34сек.
Документов проведено: 2
Тестов запущено: 2

Я полагаю, что выполнил условия ТЗ. Если заказчик считает иначе - он может привести мне пример, опровергающий мою уверенность в этом, создав неработающий тест.

Здесь можно стащить архив БД, получившейся в результате этих экспериментов (250 килобайт).

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

© 1998-2004 Fedor Ezeev.

Last updated: 2008-03-27