У меня есть класс Reporter. Внутри конструктора я инициализировал счетчик. Счетчик увеличивается внутри функции addStepLog. Через некоторое время, когда та же самая переменная счетчика вызывается внутри функции afterEachScenarioStep, значение инициализируется равным 0. Обратите внимание, что @AfterStep - это аннотация огурца (используется cucumber-java 4.2.5). Ниже мой код.
public class Reporter {
private final Object lockObject = new Object();
private int counter;
private List<String> stepLog;
public Reporter() {
stepLog = new ArrayList<>();
counter = 0;
}
public void addStepLog(String message) {
synchronized (lockObject) {
this.counter++;
stepLog.add(message);
}
System.out.println("Counter Value in addStep " + this.counter);
}
@AfterStep
public void afterEachScenarioStep(Scenario scenario) {
System.out.println("Value of Counter " + this.counter); // The value of counter is 0 here.
if (stepLog.size() > 0) {
System.out.println(counter++);
synchronized (lockObject) {
stepLog.forEach(scenario::write);
}
}
scenario.embed(screenshotArray, "image/png");
}
Размер arryList равен 0, а счетчик также инициализирован до 0. Я уверен, что огурец делает что-то смешное.
Я создал только один экземпляр Reporter из класса Login. Репортер больше нигде не используется.
public class Login {
private JsonParser jsonParser = new JsonParser();
Reporter reporter = new Reporter();
public void launchBrowser(String device) {
reporter.addStepLog("Launched the Browser.");
reporter.addStepLog("Launched the Browser.");
driver(device).launchUrl(jsonParser.getValue(device, "url"));
}
public void clickForgotPassword(String device) {
reporter.addStepLog("This is a dummy Step");
reporter.addStepLog("This is a dummy Step2");
reporter.addStepLog("This is a dummy Step3");
reporter.addStepLog("This is a dummy Step4");
driver(device).click("account.forgetPassword");
}