2011-10-21 101 views
7

我一直試圖通過創建一個延伸跑步者的suiterunner來創建一個個性化的測試套件。在用@RunWith(suiterunner.class)註解的測試套件中,我指的是需要執行的測試類。junit實現多個跑步者

在測試課內,我需要重複一個特定的測試,爲此我使用的解決方案如下所述:http://codehowtos.blogspot.com/2011/04/run-junit-test-repeatedly.html。但由於我創建了觸發測試類的suiterunner,並且在該測試類中執行@RunWith(ExtendedRunner.class),所以會引發初始化錯誤。

我需要幫助來管理這2個參賽者,還有什麼方法可以將2名參賽選手結合起來進行特定的測試嗎?有沒有其他方法可以解決這個問題或者更簡單的方法?

+0

你能提供一個完整的錯誤和堆棧跟蹤嗎?它應該按照你描述的方式工作。 –

回答

2

如果您使用最新的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中可能確實很方便。嘗試創建複合規則,玩你肯定會被粘。

希望有所幫助。