JUnit参数化测试在测试后获取参数

时间:2011-12-13 13:53:25

标签: java unit-testing parameters selenium junit

所以这就是我的困境。我一直在使用Selenium,TestNG和iText从自动测试运行的结果中生成漂亮的PDF报告,但我最近被告知他们不想要竞争库TestNG与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;
    }

}

1 个答案:

答案 0 :(得分:1)

我不确定如何在TestListener内部轻松完成您正在寻找的内容,而无需创建自己的Runner。但您可以使用TestRule处理它。

由于您似乎正在使用侦听器将结果发送到外部服务,因此您可能会更好地通过绑定与您自己的侦听器通信的TestWatcher来获得更好的运气。它可以访问本地类成员变量,并可以相当容易地报告它们。