2011-03-28 88 views
1

爲了清楚起見,我已經從所有不必要的複雜性中解決了該問題,並附加了兩個文件。實際上,我想從數據庫加載所需的測試輸入。在這個例子中我有套房映射在Suites類,而不是從查詢結果。在TestOverride的運行方法中,我也有一個相當複雜的比較,而不是簡單的比較。基本上這就是我如何以動態的方式用數據庫中的測試(套件地圖)來創建測試套件。另外,當我使用eclipse運行它時,我可以看到測試名稱,這一點很重要。無法使用JUnit和Eclipse運行單元測試以進行數據驅動測試

如果運行Suites(它和Eclipse的JUnit的運行只需右擊),它工作正常。唯一通過的測試是test4。不過,我想能夠運行這種類型的構造一個單一的測試(單套房將是很好的爲好,但我會很樂意與一個單一的測試)。換句話說,在運行所有套件之後,我想要進入JUnit窗口,右鍵單擊一個測試並運行它。如果我這樣做,它不起作用。我以某種方式認爲測試存儲在第一次運行後的某個地方,我可以在以後使用它們。

我使用eclipse 3.6和JUnit 4.0

任何想法?我不使用批註參數化的類,因爲在編譯時間之前都知道所有東西(並且我從數據庫中獲取輸入)。我也在論壇中看到,用這種方法重命名測試用例是一個相當麻煩的問題。

import java.util.HashMap; 
import java.util.Map; 

import junit.framework.Test; 
import junit.framework.TestSuite; 

public class Suites { 

public static Test suite() { 
    Map<String, String[]> suites = new HashMap<String, String[]>(); 
    suites.put("suite1", new String[]{"test1", "test2"}); 
    suites.put("suite2", new String[]{"test3", "test4"}); 

    TestSuite all = new TestSuite("All Suites"); 
    for(Map.Entry<String, String[]> entry : suites.entrySet()) { 
     TestSuite suite = new TestSuite(entry.getKey()); 
     for(String testName : entry.getValue()) { 
      suite.addTest(
        new TestOverride(
          testName 
        ) 
      ); 
     } 
     all.addTest(suite); 
    } 
    return all; 
} 
} 

import junit.framework.AssertionFailedError; 
import junit.framework.TestCase; 
import junit.framework.TestResult; 

public class TestOverride extends TestCase { 

private String name; 

public TestOverride(
     String name) 
{ 
    this.name = name; 
} 

@Override 
public void run(TestResult result) { 
    result.startTest(this); 
    if (this.name.equals("test4")) { 
     result.endTest(this); 
    } else { 
     result.addFailure(this, new AssertionFailedError("Not test4")); 
    } 
} 

@Override 
public String getName() { 
    return name; 
} 
} 

回答

0

我不認爲有可能實現你想要的。據我所知(和有經驗的)唯一的「真正」的JUnit的方法(即在現有類的實際方法)可以從JUnit的窗口中執行(使用參數化測試時,這是很容易複製。具體的測試無法運行這裏再次)。也許你應該嘗試爲測試生成java代碼(並編譯它)。

+0

非常感謝您的回答。我擔心是這樣。 – edd 2011-03-29 07:39:37

相關問題