Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема FuncTest: вопрос по тестирование форм (число прочтений - 1815 )
alexmyt
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 22
Зарегистрирован: 26. Мая 2006
FuncTest: вопрос по тестирование форм
28. Ноября 2008 :: 07:23
Печать  
Здравствуйте!

Подскажите пожалуйста, можно ли с помощью FuncTest тестировать следующую ситуацию:

Есть Форма1, которая при загрузке подготавливает некоторые данные. На Форме1 есть кнопка, по нажатию на которую запускается процедура. Процедура компонует данные в структуру, открывает Форму2 с передачей ей структуры. Форма2, в зависимости от выбора пользователя выполняет с данными определенные действия и возвращает их в Форму1, которая формирует новый набор данных на основании полученного.

То есть, если коротко, мне необходимо протестировать работу двух форм в связке. Проблема в том чтобы переключиться с первой формы на вторую для эмуляции действий пользователя, а потом продолжить работу с первой формой.

Буду благодарен за любые советы.
  
Наверх
 
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: FuncTest: вопрос по тестирование форм
Ответ #1 - 28. Ноября 2008 :: 07:34
Печать  
Во-первых, конкретные примеры обсуждать всегда проще, чем подобные абстракции. Мне вот представились форма документа и форма выбора фирмы из типовой торговли/комплексной. Но я ведь мог и неправильно представить Улыбка

Во-вторых. Бывает код, который легко тестировать, бывает код, который сложно тестировать, а бывает код, который протестировать невозможно.

Если функционал все же хочется протестировать, то это может означать, что придется переписывать код таким образом, чтобы его легче было тестировать. Пока я не уверен, что это именно наш случай, но исключать такой возможности никогда нельзя.

Я ща поеду на работу - по дороге подумаю, по приезду расскажу, чего надумал. А то я еще не проснулся толком Улыбка
  
Наверх
www  
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: FuncTest: вопрос по тестирование форм
Ответ #2 - 28. Ноября 2008 :: 07:41
Печать  
Хороший чай оказался - уже придумал.

Для юниттестов нет ничего невозможного.

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

Если что-то непонятно - расскажи подробнее про твой случай, покажу на примере.
  
Наверх
www  
IP записан
 
alexmyt
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 22
Зарегистрирован: 26. Мая 2006
Re: FuncTest: вопрос по тестирование форм
Ответ #3 - 28. Ноября 2008 :: 08:06
Печать  
Вот куски кода, из которых я попытался вычистить все лишнее, оставив самую суть. В эту процедуру передается имя запускаемой обработки, в моем случае "Обработка.КОПВкладыРасход".
Код
Выбрать все
Процедура ЗапуститьОбработку(Имя)
	Перем Список, Док;
	Список = СоздатьОбъект("СписокЗначений");
	Список.ДобавитьЗначение(0,);                                                        //1
	Список.ДобавитьЗначение(Константа.КОПОперДень,);                                    //2
// еще всякое разное передается

	ОткрытьФормуМодально(Имя,Список);
	Если Список.ПолучитьЗначение(1) = 1 Тогда		//создаем операцию
		Доки.Новый();
// тут разные обработки
	КонецЕсли;
КонецПроцедуры 



В ообработке "Обработка.КОПВкладыРасход" после того как пользователь заполнит пару полей и нажмет на кнопку "Выполнить", отрабатывается примерно следующий код:
Код
Выбрать все
	Форма.Параметр.УстановитьЗначение(9, 0);						//изменение резерва
	Форма.Параметр.УстановитьЗначение(11, -ПроцКСнятию - Налог);	//изменение процента
	Форма.Параметр.УстановитьЗначение(1, 1);
	Форма.Закрыть(0); 



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

Про контекст формы я думал, но в своем случае так и не додумал как передать его в тест.
  
Наверх
 
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: FuncTest: вопрос по тестирование форм
Ответ #4 - 28. Ноября 2008 :: 09:28
Печать  
Форму надо открывать не модально. Тогда можно получить контекст открытой формы.
  
Наверх
www  
IP записан
 
alexmyt
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 22
Зарегистрирован: 26. Мая 2006
Re: FuncTest: вопрос по тестирование форм
Ответ #5 - 28. Ноября 2008 :: 11:16
Печать  
Форма должна открываться именно модально.

Собственно, получилось навесить костыли следующим образом. Я в 1С++ и прочих вкусностях пока не слишком хорошо разбираюсь, так что ногами прошу не бить.

Код
Выбрать все
//*** В глобальном модуле создаем переменные:
Перем флИдетТестирование Экспорт;
Перем сзПеременныеДляТестирования Экспорт;

//** В нашем модуле тестирования (наследник ТестовыйСлучай)
Процедура Сетап() Экспорт
	флИдетТестирование = 1;
КонецПроцедуры

Процедура Сброс() Экспорт
	флИдетТестирование = 0;
КонецПроцедуры

Процедура Тест_НашТест() Экспорт
	// я слизал это с кода ТестДелегатаФормы
	// открываю Форму1
	Делегат=СоздатьОбъект("ДелегатФормы");
	Делегат.ОткрытьФорму("Обработка.КОПВклады");
	КонтФормы=Делегат.КонтекстФормы;

	// список значений для эелементов Формы2
	сзПеременныеДляТестирования = СоздатьОбъект("СписокЗначений");
	сзПеременныеДляТестирования.Установить("Нал",2);
	сзПеременныеДляТестирования.Установить("СуммаДок",160);

	// в этой процедуре и открывается модальная форма
	Делегат.дфВыполнитьПроцедуру("ЗапуститьОбработку",сзПарам);

	// дальше пошли обычные проверки на соответствие нашим ожиданиям
КонецПроцедуры

//** В форме Форма2, в конце процедуры ПриОткрытии, добавил
Процедура ПриОткрытии
	Если флИдетТестирование = 1 Тогда
		Делегат=СоздатьОбъект("ДелегатФормы");
		Делегат.УстановитьКонтекст(Контекст);

		Для х=1 по сзПеременныеДляТестирования.РазмерСписка() Цикл
			_атр = "";
			_знач = сзПеременныеДляТестирования.ПолучитьЗначение(х,_атр);
			Делегат.дфВвестиЗначение(_атр,_знач);
			Делегат.дфВыполнитьФормулу(_атр);
		КонецЦикла;
		Делегат.дфВыполнитьФормулу("кнВыполнить");
	КонецЕсли;
КонецПроцедуры
 



Т.е. получается что модальная форма при открытии проверяет запускается ли она в тестовом режиме, и если да то читает список элеменов формы и значений, в которые нужно установить эти значения, и через ДелегатФормы эти значения устанавливает.

Пока что у меня работает.
  
Наверх
 
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: FuncTest: вопрос по тестирование форм
Ответ #6 - 28. Ноября 2008 :: 11:43
Печать  
Ну можно и так.
  
Наверх
www  
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать