1

我有 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();
    }


}

我的 Claim 类如下所示:

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());
    }

我已经在我的 POM.XML 中导入了 picocontainer 依赖项,并且收到以下错误。

对于“class java.lang.String”来说,3 个可满足的构造函数太多了。构造函数列表:[(Buffer), (Builder), ()]

我的步骤定义类构造函数都没有接收原语作为参数。有没有人知道为什么我仍然收到该错误?会不会是我的业务对象构造函数在其构造函数中期望一个字符串?

提前感谢您的帮助。

4

2 回答 2

1

Picocontainer不仅查看您的步骤定义类来解决依赖关系。它还会查看您的步骤定义所依赖的所有类。

在这种情况下,它会尝试解决非默认Claim构造函数的依赖关系。

 public Claim(String claimType, String clientName, Customer caller) {
    ...
 }

根据这个问题,除了在所有依赖项中只保留默认构造函数之外,没有其他方法可以解决这个问题。

于 2017-11-09T19:32:46.603 回答
0

假设您的场景如下所示:

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 容器弄清楚它应该如何创建被测声明的困难。

于 2017-11-09T22:05:16.777 回答