簡體   English   中英

無法使用JUnit和Eclipse運行單個單元測試以進行數據驅動的測試

[英]Cannot run single unit test with JUnit and Eclipse for data-driven testing

為了清楚起見,我從所有不必要的復雜性中刪除了該問題,並附加了兩個文件。 實際上,我想從數據庫加載測試所需的輸入。 在示例中,我在Suites類中具有套件映射,而不是查詢結果。 我還有一個相當復雜的比較,而不是TestOverride的run方法中的簡單比較。 基本上,這就是我解決了以動態方式從數據庫(套件映射)中使用其測試創建測試套件的方法。 另外,在使用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;
}
}

如果重寫runTest()並從TestCase類創建TestSuite ,則要容易得多。

這是一個有效的示例: http : //mrlalonde.blogspot.ca/2012/08/data-driven-tests-with-junit.html

我認為無法實現您想要的。 據我所知(和經驗),只能從junit窗口中執行“真正的” junit方法(即現有類中的實際方法)(使用參數化測試時很容易重現。特定的Tests無法運行還是在這里)。

也許您應該嘗試為測試生成Java代碼(並進行編譯)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM