【问题标题】:JUnit parameterized Tests Getting the parameter after the testJUnit parameterized Tests 测试后获取参数
【发布时间】:2012-01-19 09:25:37
【问题描述】:

所以这是我的困境。我一直在使用 Selenium、TestNG 和 iText 从自动测试运行的结果中生成漂亮的 PDF 报告,但我最近被告知他们不想要竞争库 TestNG 与 JUnit,并被告知开始使用 JUnit .

我正在使用参数运行这些 JUnit 测试,我想知道有没有办法在测试运行之后/期间访问参数?参数是带有浏览器名称的字符串,用于告诉 selenium 要获取哪个 WebDriver,并且很高兴知道某个浏览器中的测试通过/失败。一旦测试运行完成,您可以访问的信息似乎非常有限。

我有一个扩展 junit.framework.TestListener 的类,它监听每个测试的开始/停止,在这里我可以收集有关测试的信息。

currentTestBaseTestResult 类型,这是我编写的一个类,它只是将测试结果存储在一个列表中。

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;
    }

}

【问题讨论】:

  • 我无法帮助您解决您的问题,但我赞赏您使用这些工具。
  • 大声笑,谢谢,一点鼓励总是很感激的。 =P
  • 这很奇怪。为什么要使用 JUnit 3 的 TestListener,而不是 JUnit 4 的 RunListener?您使用 JUnit 3 有什么原因吗?这意味着您无法访问 JUnit 4 中的所有新内容。
  • 我很着急,所以我使用了想到的第一件事。不过我会调查 RunListener。

标签: java unit-testing parameters selenium junit


【解决方案1】:

我不知道如何让它在不创建自己的Runner 的情况下从TestListener 内部轻松完成您正在寻找的事情。但是您也许可以使用TestRule 处理它。

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

【讨论】:

  • 感谢您的帮助,我不得不引入一个静态变量,我不喜欢静态变量,但它可以工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-04
  • 1970-01-01
  • 1970-01-01
  • 2020-10-17
  • 1970-01-01
  • 2015-01-19
  • 1970-01-01
相关资源
最近更新 更多