[英]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.