12

私はJUnitを使用して広範囲にテストを行っており、コードのデバッグ中に、(一時的に)テストクラス@Testを1つだけ実行したい場合があります。@RunWith(Arquillian.class)現在、私は@Ignore他のすべてのテストにを追加していて、そのようなもの@IgnoreOtherが存在するかどうか疑問に思っています。

他のすべてのテストを無視するためのより良い解決策はありますか?

4

4 に答える 4

10

ちょうど私の2セント。@srkavinが提案したように、JUnitルールを使用してみることができます。

これが例です。

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");
    }

}
于 2011-11-29T20:01:44.123 に答える
9

@Test最も簡単な方法は、すべてをに置き換えること//###$$$@Testです。次に、デバッグが終了したら、に置き換え//###$$$@Testます@Test

さらに、通常、IDEでは1つのテストのみを実行できます。たとえば、Eclipseでは、アウトラインビューから実行できます。

于 2011-11-29T19:08:03.690 に答える
5

テストルール(JUnit 4.7以降)が役立ちます。たとえば、特定の名前を持つメソッドを除くすべての@Testメソッドを無視するルールを作成できます。

于 2011-11-29T19:14:09.483 に答える
4

srkavin(およびmijer )からの答えは正しいですが、コードはJUnit4.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();
            }
        }
    };
  }
}
于 2011-11-30T05:56:09.173 に答える