java - JUnit parameterized Tests 获取测试后的参数

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

}

最佳答案

我不确定如何在不创建您自己的 Runner 的情况下让它从 TestListener 内部简单地完成您正在寻找的事情。但是你可以用 TestRule 来处理它.

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

关于java - JUnit parameterized Tests 获取测试后的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8490339/

相关文章:

java - Java 中的 "Scanner.nextLine()"会跳过,"NoLineFound"-Exception

java - 如何在一次迭代中到达单向链表的中间?

java - JSP 文件中的 Eclipse 和 struts 语法错误

JavaScript 函数重载未定义

java - ClassLoader.getSystemResourceAsStream(className) 尝试加载类文件资源时返回 null

unit-testing - 在哪里放置 'useLegacyV2RuntimeActivationPolicy' 以在 TFS2012 中构建

java - 如果 @BeforeMethod 失败,TestNG 至 6.10 会忽略套件中的后续类

objective-c - 在为 Objective-C 进行单元测试时,您如何测试 block ?

javascript - 如何将函数作为参数传递以运行多次?

c++ - 传递失败的模板参数