Совместное использование состояния между определениями шагов в Cucumber
У меня есть 4 класса определения шагов и набор классов объектов домена. Мой класс определения первого шага выглядит так:
public class ClaimProcessSteps {
Claim claim;
public ClaimProcessSteps(Claim w){
this.claim = w;
}
@Given("^a claim submitted with different enrolled phone's model$")
public void aClaimSubmittedFromCLIENTSChannelWithDifferentEnrolledPhoneSModel() throws Throwable {
claim = ObjMotherClaim.aClaimWithAssetIVH();
}
}
Мой класс заявок выглядит так:
public class Claim {
private String claimType;
private String clientName;
private Customer caller;
private List<Hold> holds;
public Claim() {}
public Claim(String claimType, String clientName, Customer caller) {
this.claimType = claimType;
this.clientName = clientName;
this.caller = caller;
}
public String getClaimType() {
return claimType;
}
Мой класс определения второго шага выглядит так:
public class CaseLookupSteps {
Claim claim;
public CaseLookupSteps(Claim w){
this.claim = w;
}
@When("^I access case via (right|left) search$")
public void iAccessCaseInCompassViaRightSearch(String searchVia) throws Throwable {
System.out.println(claim.getClaimType());
}
Я уже импортировал зависимость picocontainter в свой файл POM.XML и получаю следующую ошибку.
3 удовлетворяемых конструктора - это слишком много для класса java.lang.String. Список конструктора:[(Buffer), (Builder), ()]
Ни один из моих конструкторов классов определения шагов не получает примитивы в качестве аргументов. Кто-нибудь знает, почему я все еще получаю эту ошибку? Может ли это быть мой конструктор бизнес-объекта, который ожидает String в своем конструкторе?
Заранее благодарю за любую помощь.
2 ответа
Предполагая, что ваш сценарий выглядит следующим образом:
Given some sort of claim
When I lookup this claim
Then I see this claim
В настоящее время в вашем тесте отсутствует шаг настройки претензии.
Поэтому вместо непосредственного совместного использования объекта заявки между этапами следует создать ClaimService
класс только с конструктором по умолчанию. Вы можете добавить эту услугу в свои определения шагов.
После того, как вы ввели сервис, вы можете использовать его в определении шага Given some sort of claim
звонитьclaimService.createSomeSortOfClaim()
создать иск. Это утверждение может быть создано в памяти, в фиктивной БД, фактической БД или другом постоянном носителе.
В When I lookup this claim
Вы тогда используете claimService.getClaim()
чтобы вернуть это требование, чтобы вы могли использовать его тип для поиска.
Делая это таким образом, вы избежите трудностей, пытаясь заставить контейнер DI выяснить, как он должен создавать тестируемое утверждение.
Picocontainer
просматривает не только ваши классы определения шагов для разрешения зависимостей. Он также просматривает все классы, от которых зависят ваши определения шагов.
В этом случае он пытается разрешить зависимости для вашего не по умолчанию Claim
конструктор.
public Claim(String claimType, String clientName, Customer caller) {
...
}
В соответствии с этой проблемой нет способа решить эту проблему, кроме как оставить только конструкторы по умолчанию во всех ваших зависимостях.