Тесты с параметризацией JUnit Получение параметра после теста - PullRequest
2 голосов
/ 13 декабря 2011

Итак, вот моя дилемма. Я использовал Selenium, TestNG и iText для создания хороших отчетов в формате PDF по результатам автоматического запуска теста, но недавно мне сказали, что они не хотят конкурировать с библиотеками TestNG и JUnit, и мне сказали вместо этого начать использовать JUnit ,

Я запускаю эти тесты JUnit с параметрами, и мне интересно, есть ли способ получить доступ к параметру после / во время выполнения теста? Параметры - это строки с именами браузеров, которые используются для указания селену, какой 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 Ответ

1 голос
/ 13 декабря 2011

Я не уверен, как заставить его делать то, что вы ищете, тривиально изнутри TestListener, не создавая свой собственный Runner.Но вы могли бы справиться с этим с помощью TestRule.

Поскольку вы, похоже, используете прослушиватель для отправки результатов во внешнюю службу, вам, возможно, повезет больше, особеннооснастка TestWatcher, которая связывается с вашим собственным слушателем.Он имел бы доступ к локальным переменным-членам класса и мог бы сообщать о них довольно легко.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...