JUnit @ Игнорировать все остальные тесты (@IgnoreOther?) - PullRequest
10 голосов
/ 29 ноября 2011

Я интенсивно тестирую с помощью JUnit, и иногда - при отладке своего кода - я хочу (временно) запустить только один @Test из моего @RunWith(Arquillian.class) тестового класса.В настоящее время я добавляю @Ignore ко всем другим тестам и задаюсь вопросом, существует ли что-то вроде @IgnoreOther.

Существуют ли лучшие решения, чтобы игнорировать все остальные тесты?

Ответы [ 4 ]

8 голосов
/ 30 ноября 2011

Только мои два цента. Вы можете попробовать использовать Junit Rules , как предложено @srkavin.

Вот пример.

package org.foo.bar;

import org.junit.rules.MethodRule;
import org.junit.runners.model.FrameworkMethod;
import org.junit.runners.model.Statement;

public class SingleTestRule implements MethodRule {
    private String applyMethod;
    public SingleTestRule(String applyMethod) {
        this.applyMethod = applyMethod;
    }
    @Override
    public Statement apply(final Statement statement, final FrameworkMethod method, final Object target) {
        return new Statement() {
            @Override
            public void evaluate() throws Throwable {
                if (applyMethod.equals(method.getName())) {
                    statement.evaluate();
                }
            }
        };
    }
}

package org.foo.bar;

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

public class IgnoreAllTest {

    @Rule
    public SingleTestRule test = new SingleTestRule("test1");

    @Test
    public void test1() throws Exception {
        System.out.println("test1");
    }

    @Test
    public void test2() throws Exception {
        Assert.fail("test2");
    }

    @Test
    public void test3() throws Exception {
        Assert.fail("test3");
    }

}
5 голосов
/ 29 ноября 2011

Правила испытаний (JUnit 4.7+) помогут.Например, вы можете написать правило, которое игнорирует все методы @Test, кроме одного с определенным именем .

5 голосов
/ 29 ноября 2011

Самый простой способ - заменить все @Test на //###$$$@Test.Затем по окончании отладки замените //###$$$@Test на @Test.

Более того, как правило, в средах разработки разрешается запускать только один тест.Например, в Eclipse вы можете сделать это из представления Outline.

4 голосов
/ 30 ноября 2011

Ответ от srkavin mijer ) правильный, но код не поддерживается с JUnit 4.9. Интерфейс и подпись метода изменились. Я хочу предоставить это другим, заинтересованным в этом вопросе.

public class IgnoreOtherRule implements TestRule
{
  private String applyMethod;

  public IgnoreOtherRule(String applyMethod){
    this.applyMethod = applyMethod;
  }

  @Override
  public Statement apply(final Statement statement, final Description description)
  {
    return new Statement()
    {
        @Override
        public void evaluate() throws Throwable {
            if (applyMethod.equals(description.getMethodName())) {
                statement.evaluate();
            }
        }
    };
  }
}
...