私はJUnitを使用して広範囲にテストを行っており、コードのデバッグ中に、(一時的に)テストクラス@Test
を1つだけ実行したい場合があります。@RunWith(Arquillian.class)
現在、私は@Ignore
他のすべてのテストにを追加していて、そのようなもの@IgnoreOther
が存在するかどうか疑問に思っています。
他のすべてのテストを無視するためのより良い解決策はありますか?
私はJUnitを使用して広範囲にテストを行っており、コードのデバッグ中に、(一時的に)テストクラス@Test
を1つだけ実行したい場合があります。@RunWith(Arquillian.class)
現在、私は@Ignore
他のすべてのテストにを追加していて、そのようなもの@IgnoreOther
が存在するかどうか疑問に思っています。
他のすべてのテストを無視するためのより良い解決策はありますか?
ちょうど私の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");
}
}
@Test
最も簡単な方法は、すべてをに置き換えること//###$$$@Test
です。次に、デバッグが終了したら、に置き換え//###$$$@Test
ます@Test
。
さらに、通常、IDEでは1つのテストのみを実行できます。たとえば、Eclipseでは、アウトラインビューから実行できます。
テストルール(JUnit 4.7以降)が役立ちます。たとえば、特定の名前を持つメソッドを除くすべての@Testメソッドを無視するルールを作成できます。
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();
}
}
};
}
}