Слюни для формулировки теста - PullRequest
1 голос
/ 02 марта 2011

Я тестирую довольно сложную систему, которая работает в соответствии с некоторыми бизнес-правилами (написанными как полуформальный текст).

Цель состоит в том, чтобы создать контрольные примеры, охватывающие как можно больше состояний системы. Я хочу автоматизировать эту задачу следующим образом:

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) && (condition2 == true));
    then
        outErrorCodes.add("ERROR_CODE2");
end

условие1, условие2 и условие3 являются входами. outErrorCode - это вывод.

То есть условие 1, условие 2 и условие 3 описывают определенную ситуацию, а outErrorCode описывает ожидаемое поведение системы в этой конкретной ситуации.

Я хочу создать механизм, который автоматически создает список всех возможных кортежей (условие 1, условие 2, условие 3, outErrorCodes), основываясь на логике в правилах. Каждый кортеж представляет состояние системы.

Эти кортежи будут затем использоваться в качестве основы для создания реальных тестовых случаев.

Возможно ли это с Drools? Если так - как?

Большое спасибо заранее

Дмитрий

1 Ответ

1 голос
/ 18 марта 2011

Мы успешно взяли набор правил, развернули его как сервис с использованием drools-server, а затем написали скрипт для вызовов веб-сервисов, использующих каждое возможное значение каждой входной переменной.В течение часа мы смогли сделать более 5000 звонков в нашу базу правил и посмотреть результаты для каждого случая.

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

...