junit реализация нескольких бегунов

Я пытался создать персонализированный набор тестов, создав SuiteRunner, который расширяет runner. В наборе тестов, который помечен @RunWith(suiterunner.class), я имею в виду тестовые классы, которые необходимо выполнить.

В тестовом классе мне нужно повторить определенный тест, для этого я использую решение, как указано здесь: http://codehowtos.blogspot.com/2011/04/run-junit-test-repeatedly.html . но так как я создал suiterunner, который запускает тестовый класс, и в этом тестовом классе я реализую @RunWith(ExtendedRunner.class), возникает ошибка инициализации.

Мне нужна помощь, чтобы управлять этими двумя бегунами, а также есть ли способ объединить двух бегунов для определенного теста? Есть ли другой способ решить эту проблему или какой-либо более простой способ продолжить?


person vpradhan    schedule 21.10.2011    source источник
comment
Можете ли вы предоставить полную ошибку и трассировку стека? Должно работать так, как вы описали.   -  person Łukasz Rżanek    schedule 15.02.2012


Ответы (1)


Если вы используете последнюю версию JUnit, вы можете использовать @Rules как более чистое решение вашей проблемы. Вот образец;

Представьте, что это ваше приложение;

package org.zero.samples.junit;

/**
 * Hello world!
 * 
 */
public class App {
  public static void main(String[] args) {
    System.out.println(new App().getMessage());
  }

  String getMessage() {
    return "Hello, world!";
  }
}

Это ваш тестовый класс;

package org.zero.samples.junit;

import static org.junit.Assert.*;

import org.junit.Rule;
import org.junit.Test;

/**
 * Unit test for simple App.
 */
public class AppTest {

  @Rule
  public RepeatRule repeatRule = new RepeatRule(3); // Note Rule

  @Test
  public void testMessage() {
    assertEquals("Hello, world!", new App().getMessage());
  }
}

Создайте класс правил, например;

package org.zero.samples.junit;

import org.junit.rules.TestRule;
import org.junit.runner.Description;
import org.junit.runners.model.Statement;

public class RepeatRule implements TestRule {

  private int repeatFor;

  public RepeatRule(int repeatFor) {
    this.repeatFor = repeatFor;
  }

  public Statement apply(final Statement base, Description description) {
    return new Statement() {

      @Override
      public void evaluate() throws Throwable {
        for (int i = 0; i < repeatFor; i++) {
          base.evaluate();
        }
      }
    };
  }

}

Выполните свой тестовый пример как обычно, только на этот раз ваши тестовые примеры будут повторяться заданное количество раз. Вы можете найти интересные варианты использования, где @Rule действительно может оказаться удобным. Попробуйте создать составные правила, игра вокруг вас обязательно склеится.

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

person Nitin Tripathi    schedule 04.06.2013