#drools
#пускает слюни
Вопрос:
Я тестирую довольно сложную систему, которая ведет себя в соответствии с некоторыми бизнес-правилами (написанными в виде полуофициального текста).
Цель состоит в том, чтобы создать тестовые примеры, которые охватывают как можно больше состояний системы. Я хочу автоматизировать эту задачу следующим образом:
1) Формализуйте бизнес-правила в Drools 2) Затем используйте некоторый механизм для создания списка всех возможных ситуаций (которые необходимо протестировать)
Например, у меня есть следующий пакет бизнес-правил с двумя правилами (это только пример, реальные бизнес-правила намного сложнее):
global List outErrorCodes;
global Boolean condition1;
global Boolean condition2;
global Boolean condition3;
rule "01"
when
eval( condition3 == false);
then
outErrorCodes.add("ERROR_CODE1");
end
rule "02"
when
eval((condition1 == true) amp;amp; (condition2 == true));
then
outErrorCodes.add("ERROR_CODE2");
end
условие1, условие2 и условие3 являются входными данными.
outErrorCode — это результат.
То есть условие1, условие2 и условие3 описывают определенную ситуацию, а outErrorCode описывает ожидаемое поведение системы в этой конкретной ситуации.
Я хочу создать механизм, который автоматически создает список всех возможных кортежей (condition1, condition2, condition3, outErrorCodes), основанный на логике в правилах. Каждый кортеж представляет состояние системы.
Затем эти кортежи будут использоваться в качестве основы для создания реальных тестовых примеров.
Возможно ли это с Drools? Если да — то как?
Заранее большое спасибо
Дмитрий
Ответ №1:
Нам удалось взять набор правил, развернуть его как службу с помощью drools-server, а затем написать скрипт для выполнения вызовов веб-службы, использующий каждое возможное значение каждой входной переменной. Примерно за час мы смогли выполнить более 5000 обращений к нашей базе правил и увидеть результаты для каждого случая.
Недостатком (и я не думаю, что вы сможете обойти это каким-либо решением) является то, что вы тестируете бизнес-логику. Когда вы думаете об этом, вы можете сгенерировать все тестовые данные, которые вы хотите, но вы не можете сгенерировать тестовые входные данные и ожидаемый результат без запуска бизнес-логики (которую вы тестируете). Просто говорю, что если вы перейдете к автоматической генерации входных данных для бизнес-логики, вы не сможете на самом деле узнать ожидаемые результаты, не нарушая целостности теста.