2011-10-21 24 views
7

ランナーを拡張するスーツナーを作成してパーソナライズされたテストスイートを作成しようとしています。 @RunWith(suiterunner.class)と注釈が付けられたテストスイートでは、実行する必要があるテストクラスを参照しています。 http://codehowtos.blogspot.com/2011/04/run-junit-test-repeatedly.html:私はここに述べたように、私は解決策を使用していますそうするために、特定のテストを繰り返す必要があり、テストクラス内複数のランナーのjunit実装

。私はテストクラスをトリガーし、そのテストクラス内で私が@RunWith(ExtendedRunner.class)を実装しているスーツナーを作成しているので、初期化エラーがスローされます。

私はこれらの2人のランナーを管理するのに役立つとも特定のテストのために2人のランナーを結合する方法がある必要がありますか?この問題を解決する他の方法はありますか?

+0

完全なエラーとスタックトレースを提供できますか?それはあなたがそれを記述したやり方で動作するはずです。 –

答えて

2

あなたが最新のJUnitを使用している場合は、あなたの問題をもっと洗練された解決策にすることができます。ここにサンプルがあります。

これはあなたのアプリケーションであると想像してください。

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の便利な使用例が実際に分かりやすいかもしれません。 ...確実に接着されます、あなたの周りに再生する、複合ルールを作成することができます

希望をお試しください。

関連する問題