Я использую Spring с Cucumber (и IntelliJ и Gradle).Мой тестовый пример не проходит при запуске вместе и проходит при запуске по отдельности.(Ошибка 2 из 3 раз, иногда это работает ...)
Я также пытался изолировать проблемные комбинации сценариев или Senario, но не повезло ... Я попытался ввести хуки @After и @Before длясбросить значение учетной записи ... Я даже пытался переключить позицию senarios, ничего не помогает ...
Я действительно надеюсь, что кто-то может помочь мне с этой проблемой
Особенности:
Feature: Cash Withdrawal
Scenario: Successful withdrawal from an account in credit
Given my account has been credited with $100.00
When I withdraw $20
Then $20 should be dispensed
And the balance of my account should be $80.00
Scenario: Unsuccessful withdrawal due to technical fault
Given my account is in credit
But the cash slot has developed a fault
When I request some of my money
Then I should see an out-of-order message
And $0 should be dispensed
And the balance of my account should be unchanged
Scenario: Unsuccessful withdrawal due to insufficient ATM funds
Given my account is in credit
And the ATM contains $10
When I withdraw $20
Then I should see an ask-for-less-money message
And $0 should be dispensed
And the balance of my account should be unchanged
И мои пошаговые определения:
public class AccountSteps {
@Autowired
Account account;
private Money originalBalance;
@Given("^my account has been credited with (\\$\\d+\\.\\d+)$")
public void myAccountHasBeenCreditedWith$(
@Transform(MoneyConverter.class) Money amount)
throws Throwable {
account.credit(amount);
}
@Given("^my account is in credit$")
public void myAccountIsInCredit$() throws Throwable {
originalBalance = new Money(30, 00);
account.credit(originalBalance);
}
@Then("^the balance of my account should be unchanged$")
public void theBalanceOfMyAccountShouldBeUnchanged() throws Throwable {
checkBalanceIs(originalBalance);
}
@Then("^the balance of my account should be (\\$\\d+\\.\\d+)$")
public void theBalanceOfMyAccountShouldBe$(
@Transform(MoneyConverter.class) Money amount) throws Throwable {
checkBalanceIs(amount);
}
private void checkBalanceIs(Money amount) throws Throwable {
int timeoutMilliSecs = 3000;
int pollIntervalMilliSecs = 100;
while (!account.getBalance().equals(amount) && timeoutMilliSecs > 0) {
Thread.sleep(pollIntervalMilliSecs);
timeoutMilliSecs -= pollIntervalMilliSecs;
}
Assert.assertEquals(
"Incorrect account balance -",
amount,
account.getBalance());
}
}
public class CashSlotSteps {
@Autowired
TestCashSlot cashSlot;
@Given("^\\$(\\d+) should be dispensed$")
public void $ShouldBeDispensed(int dollars) throws Throwable {
Assert.assertEquals("Incorrect amount dispensed -", dollars,
cashSlot.getContents());
}
@Given("^the cash slot has developed a fault$")
public void theCashSlotHasDevelopedAFault() throws Throwable {
cashSlot.injectFault();
}
@Given("^the ATM contains \\$(\\d+)$")
public void theATMContains$(int dollars) throws Throwable {
cashSlot.load(dollars);
}
}
public class TellerSteps {
@Autowired
private Account account;
@Autowired
private AtmUserInterface teller;
@When("^I withdraw \\$(\\d+)$")
public void iWithdraw$(int amount) throws Throwable {
teller.withdrawFrom(account, amount);
}
@Given("^I request some of my money$")
public void iRequestSomeOfMyMoney() {
int dollarsRequested = 10;
teller.withdrawFrom(account, dollarsRequested);
}
@Then("^I should see an out-of-order message$")
public void iShouldSeeAnOutOfOrderMessage() throws Throwable {
Assert.assertTrue(
"Expected error message not displayed",
teller.isDisplaying("Out of order"));
}
@Then("^I should see an ask-for-less-money message$")
public void iShouldSeeAnAskForLessMoneyMessage() throws Throwable {
Assert.assertTrue(
"Expected error message not displayed",
teller.isDisplaying("Insufficient ATM funds"));
}
}