【发布时间】:2020-11-12 19:37:56
【问题描述】:
我们正在使用 Cucumber 库来自动化我们的用户故事测试。测试确实运行了,但所有测试都失败了,因为我们得到了很多 NullPointer-exceptions。
这些NullPointer-exceptions 的原因是 Cucumber 忽略了我们放置在一个名为 setUp() 的函数上方的 @BeforeEach-annotation,我们在其中定义了所有变量。
以第 56 行的 @Given("er is een lijst van bestellingen") 为例。assertEqual 函数失败,因为我们的列表 bestellingen 有零项。但是我们已经在 setUp() 函数中添加了这些项目...
我们真的不知道如何正确使用这个库,文档也没有进一步帮助我们。
这是我们相关的测试代码:
package be.kdg.cucumber;
import io.cucumber.java.Before;
import io.cucumber.java.en.And;
import io.cucumber.java.en.Given;
import io.cucumber.java.en.Then;
import io.cucumber.java.en.When;
import org.junit.jupiter.api.BeforeEach;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertNotNull;
public class DeliDishStepDefs {
private Bestellingen bestellingen = new Bestellingen();
private Gerecht g1;
private Gerecht g2;
private Klant k1;
private Klant k2;
private Bestelling b1;
private Bestelling b2;
private Bestelling b3;
private Koerier c1;
int puntenKoerier;
@BeforeEach
@Before
void setUp() {
//System.out.println("lol");
bestellingen = new Bestellingen();
g1 = new Gerecht(1,"pizza calzone", 12.99);
g2 = new Gerecht(2,"spaghetti bolognaise", 12.99);
k1 = new Klant(1, "Jan De Rijke","kerkstraat 7");
k2 = new Klant(2, "Piet Boedt", "kerkstraat 7");
b1 = new Bestelling(1, g1, k1);
b2 = new Bestelling(2, g1, k2);
b3 = new Bestelling(3, g2, k1);
bestellingen.add(b1);
bestellingen.add(b2);
bestellingen.add(b3);
System.out.println("xxxx " + bestellingen.getSize());
c1 = new Koerier(1, "Bert Fransens");
}
@Given("er is een lijst van bestellingen")
public void er_is_een_lijst_van_bestellingen() {
assertNotNull(bestellingen, "Er moet een lijst zijn van bestellingen");
int size = bestellingen.getSize();
assertEquals(3, size, "Er moeten 3 bestellingen zitten in de lijst");
}
@When("De koerier met id {int} kiest een bestelling met id {int}")
public void de_koerier_met_id_kiest_een_bestelling_met_id(Integer int1, Integer int2) {
if (c1.getId() == int1) {
if (b1.getId() == int2) {
c1.setActieveBestelling(b1);
}
}
}
@Then("De koerier met id {int} heeft een actieve bestelling met id {int}")
public void de_koerier_met_id_heeft_een_actieve_bestelling_met_id(Integer int1, Integer int2) {
assertEquals(int1, c1.getId(), "De id van de koerier moet " + int1 + " zijn");
assertEquals(int2, b1.getId(), "De id van de bestelling moet " + int2 + " zijn");
assertNotNull(c1.getActieveBestelling(), "Er moet een actieve bestelling zijn");
}
@Given("Er is een actieve bestelling met id {int} bij de koerier met id {int}")
public void er_is_een_actieve_bestelling_met_id_bij_de_koerier_met_id(Integer int1, Integer int2) {
assertEquals(int1, c1.getId(), "De id van de koerier moet " + int1 + " zijn");
assertEquals(int2, c1.getActieveBestelling().getId(), "De actieve bestelling van de koerier" + int2 + " moet als id " + int1 + " hebben");
assertNotNull(c1.getActieveBestelling(), "Er moet een actieve bestelling zijn");
}
@When("Bestelling met id {int} is afgehaald door de koerier met id {int}")
public void bestelling_met_id_is_afgehaald_door_de_koerier_met_id(Integer int1, Integer int2) {
if (c1.getId() == int1) {
if (b1.getId() == int2) {
c1.getActieveBestelling().setStatus(BestellingStatus.AFGEHAALD);
}
}
}
@Then("Bestelling met id {int} heeft status afgehaald")
public void bestelling_met_id_heeft_status_afgehaald(Integer int1) {
assertEquals(int1, b1.getId(), "De id van de bestelling moet " + int1 + " zijn");
assertEquals(c1.getActieveBestelling().getStatus(), BestellingStatus.AFGEHAALD, "De bestelling moet een status hebben van afgehaald");
}
@Given("Er is een actieve bestelling met id {int} bij de koerier met id {int} met status afgehaald")
public void er_is_een_actieve_bestelling_met_id_bij_de_koerier_met_id_met_status_afgehaald(Integer int1, Integer int2) {
assertEquals(int2, c1.getId(), "De id van de koerier moet " + int2 + " zijn");
assertEquals(int1, c1.getActieveBestelling().getId(), "De actieve bestelling van de koerier" + int2 + " moet als id " + int1 + " hebben");
assertNotNull(c1.getActieveBestelling(), "Er moet een actieve bestelling zijn");
assertEquals(c1.getActieveBestelling().getStatus(), BestellingStatus.AFGEHAALD, "De bestelling moet afgehaald zijn");
}
@When("Bestelling met id {int} wordt geleverd door koerier met id {int}")
public void bestelling_met_id_wordt_geleverd_door_koerier_met_id(Integer int1, Integer int2) {
if (c1.getId() == int2) {
if (b1.getId() == int1) {
c1.getActieveBestelling().setStatus(BestellingStatus.GELEVERD);
}
}
}
@Then("Bestelling met id {int} heeft status geleverd")
public void bestelling_met_id_heeft_status_geleverd(Integer int1) {
assertEquals(int1, b1.getId(), "De id van de bestelling moet " + int1 + " zijn");
assertEquals(c1.getActieveBestelling().getStatus(), BestellingStatus.GELEVERD, "De bestelling moet een status hebben van geleverd");
}
@And("De koerier met id {int} krijgt {int} punten")
public void de_koerier_met_id_krijgt_punten(Integer int1, Integer int2) {
if (c1. getId() == int1) {
c1.addPunten(int2);
c1.voltooiBestelling();
}
}
@And("De koerier met id {int} zijn actieve bestelling met id {int} is verwijderd")
public void de_koerier_met_id_zijn_actieve_bestelling_met_id_is_verwijderd(Integer int1, Integer int2) {
assertEquals(int1, c1.getId(), "De id van de koerier moet " + int1 + " zijn");
assertNull(c1.getActieveBestelling(), "De actieve bestelling met id " + int2 + " van koer met id " + int1 + " moet null zijn");
}
@And("De koerier met id {int} heeft {int} voltooide bestelling")
public void de_koerier_met_id_heeft_voltooide_bestelling(Integer int1, Integer int2) {
assertEquals(int1, c1.getId(), "De id van de koerier moet " + int1 + " zijn");
int size = c1.getSizeBestellingen();
assertEquals(int2, size, "Het aantal voltooide bestellingen moet " + int2 + " zijn");
}
@Given("De koerier met id {int} heeft een account")
public void de_koerier_met_id_heeft_een_account(Integer int1) {
assertEquals(int1, c1.getId(), "De koerier met deze id bestaat niet");
throw new cucumber.api.PendingException();
}
@When("De koerier met id {int} punten opvraagd")
public void de_koerier_met_id_punten_opvraagd(Integer int1) {
if (c1.getId() == int1) {
puntenKoerier = c1.getPunten();
}
}
@Then("Voor de koerier met id {int} worden er {int} punten getoond")
public void voor_de_koerier_met_id_worden_er_punten_getoond(Integer int1, Integer int2) {
assertEquals(int1, c1.getId(), "De id van de koerier moet " + int1 + " zijn");
int aantalPunten = c1.getPunten();
assertEquals(int2, aantalPunten, "Het aantal punten van koerier met id " + int1 + " moet " + int2 + " zijn");
}
}
Git 上的完整项目:https://gitlab.com/NielD/cucumber
【问题讨论】:
-
Cucumber 有自己的钩子。它们与 JUnit 中的不同。