junit внедряване на множество бегачи

Опитвам се да създам персонализиран тестов пакет, като създам suiterunner, който разширява runner. В тестовия пакет, който е анотиран с @RunWith(suiterunner.class), имам предвид тестовите класове, които трябва да бъдат изпълнени.

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

Имам нужда от помощ, за да управлявам тези 2 бегача и също така има ли някакъв начин да комбинирам 2 бегача за определен тест? Има ли друг начин за решаване на този проблем или по-лесен начин да продължите?


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