Подтвердить что ты не робот

Можно ли программно генерировать тестовые примеры и комплекты JUnit?

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

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

Рассматривали ли вы использование FIT для этого?

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

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

Ответ 3

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

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

Ответ 4

Я написал что-то очень похожее с помощью 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 я сделал именно то, что вы говорите - генерация тестов "на лету". Однако делать это на Java сложно, и я не думаю, что это того стоит, так как есть другой, вполне разумный подход.

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