簡體   English   中英

JUnit參數化測試在測試后獲取參數

[英]JUnit parameterized Tests Getting the parameter after the test

所以這是我的難題。 我一直在使用Selenium,TestNG和iText從自動測試運行的結果中生成漂亮的PDF報告,但是最近有人告訴我他們不想要競爭的庫TestNG vs. JUnit,並被告知開始使用JUnit。 。

我正在使用參數運行這些JUnit測試,並且想知道是否可以在測試運行之后/期間訪問參數? 參數是帶有瀏覽器名稱的字符串,用於告訴selenium要獲取哪個WebDriver,並且很高興知道測試在某個瀏覽器中通過/失敗。 測試運行完成后,您可以訪問JUnit的信息似乎非常有限。

我有一個擴展junit.framework.TestListener的類,它偵聽每個測試的開始/停止,在這里我可以收集有關測試的信息。

currentTest的類型為BaseTestResult ,這是我編寫的僅將測試結果存儲在列表中的類。

import junit.framework.AssertionFailedError;
import junit.framework.Test;
import junit.framework.TestListener;
import junit.framework.TestResult;
import utilities.reporting.BaseReporting;
import utilities.reporting.BaseTestResult;
import utilities.reporting.ResultsPerSuite;

public class BaseListener implements TestListener {

    private ResultsPerSuite resultsPerSuite;
    private BaseReporting baseReporter;
    private BaseTestResult currentSuite;
    private BaseTestResult currentTest;
    private long startTime;
    private long endTime;
    private long suiteStartTime;
    private long suiteEndTime;

    public BaseListener() {
        baseReporter = new BaseReporting();
        resultsPerSuite = new ResultsPerSuite();
        currentTest = new BaseTestResult(null, null);
    }

    public void startSuite(Test suite) {
        suiteStartTime = System.currentTimeMillis();
        currentSuite = new BaseTestResult(suite);
    }

    @Override
    public void startTest(Test arg0) {
        startTime = System.currentTimeMillis();
        currentTest = new BaseTestResult(arg0);     
    }

    @Override
    public void addError(Test arg0, Throwable arg1) {
        currentTest.addError(new BaseTestResult(arg0, arg1));

    }

    @Override
    public void addFailure(Test arg0, AssertionFailedError arg1) {
        currentTest.addFailed(new BaseTestResult(arg0, arg1));

    }

    @Override
    public void endTest(Test arg0) {
        endTime = System.currentTimeMillis();
        currentTest.setRuntime(startTime - endTime);
        // If both empty, then test passed, so add to passed results.
        if (currentTest.getFailed().isEmpty()
                && currentTest.getErrors().isEmpty()) {
            resultsPerSuite.addPassed(currentTest);
        } else {
            resultsPerSuite.addFailed(currentTest);
        }
    }

    public void endSuite(TestResult testEventDriver) {
        suiteEndTime = System.currentTimeMillis();
        currentSuite.setRuntime(suiteEndTime - suiteStartTime);
        resultsPerSuite.setSuite(currentSuite);

        baseReporter.printToConsole(resultsPerSuite);

    }

    /**
     * @return the allTestResults
     */
    public ResultsPerSuite getAllTestResults() {
        return resultsPerSuite;
    }

}

我不確定如何在不創建自己的Runner情況下從TestListener內部簡單地完成它的工作。 但是您可以使用TestRule處理它。

由於您似乎正在使用偵聽器將結果發送到外部服務,因此,特別是通過裝配與您自己的偵聽器進行通信的TestWatcher ,可能會更好。 它可以訪問本地類成員變量,並且可以很容易地報告它們。

暫無
暫無

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

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