2009-10-29 2 views
16

Мне нужно написать очень большой набор тестов для сложного набора бизнес-правил, которые в настоящее время фиксируются в нескольких табличных формах (например, если параметры X Y Z такие и такие, значение должно быть между V1 и V2). Каждое правило имеет имя и собственную семантику.Можно ли программно генерировать тестовые примеры и комплекты JUnit?

Моя конечная цель состоит в том, чтобы иметь тестовый набор, организованный в подпрограммы, с тестовым примером для каждого правила.

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

Другой - написать скрипт Python, который будет читать файлы правил и генерировать классы Java с модульными тестами. Я бы предпочел избежать этого, если смогу. Другой вариант - использовать Jython.

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

Есть ли разумный способ сделать это, используя только Java?

Обновление: Возможно, я несколько упростил наши правила. Некоторые из них действительно табличные (стиль excel), другие - более нечеткие. Однако общий вопрос остается, поскольку я, вероятно, не первый человек, у которого есть эта проблема.

+0

Очень интересно узнать об этом; Мне нужно больше узнать о тестах. – I82Much

ответ

17

Внутри JUnit 4 вы хотите посмотреть на Parameterized runner. Он был создан с целью описания (тесты, управляемые данными). Однако он не будет организовывать их в апартаменты.

В Junit 3 вы можете создавать TestSuites и тесты программно. Ответ находится в Junit Recipes, который я могу расширить, если вам это нужно (помните, что JUnit 4 может запускать тесты Junit 3).

8

Вы считаете, что используете FIT?

У вас, похоже, уже готовые таблицы, а «бизнес-правила» звучат так, как «деловые люди пишут их с помощью excel».

FIT - это система для проверки тестов на основе таблиц с вводом-> ожидаемых выходных сопоставлений, а также доступна Java-библиотека с открытым исходным кодом для запуска этих тестов.

+0

Также для этого есть Java-драйверы. –

+0

Вот что я собирался сказать; ваше дело звучит точно так же, как то, что нужно для решения; Я рекомендую фитнес (http://fitnesse.org), поскольку это самая обновленная и текущая реализация, о которой я могу думать. – Kevlar

+0

Спасибо. Я знаком с FIT, но не знаком с новыми реализациями; Я проверю их. Тем не менее, я задаюсь вопросом, есть ли программный способ остаться в JUnit. – Uri

1

Мы попробовали FIT и решили пойти с Concordion. Основные преимущества этой библиотеки являются:

  • тесты могут быть проверены вместе с кодом базы (в хранилище Subversion, например)
  • они выполняются с помощью стандартного JUnit бегуна
0

Я написал что-то очень похожее с помощью JUnit. У меня было большое количество тестовых примеров (30 страниц) в файле XML. Вместо того, чтобы пытаться генерировать разные тесты, я сделал все это в одном тесте, который работал отлично.

Мой тест выглядел примерно так:

void setup() { 
    cases = read in the xml file 
} 

void test_fn_works() { 
    for case in cases { 
    assert(case.expected_result, fn(case.inputs), 
     'Case ' + case.inputs + ' should yield ' + case.expected_result); 

    } 
} 

С Ruby, я сделал именно то, что вы saying-- генерации тестов на лету.Выполнение этого на Java, однако, является сложным, и я не думаю, что это того стоит, так как есть другой, вполне разумный подход.

Надеюсь, это поможет.

Смежные вопросы