如何比较Java中预期对象属性是动态的两个对象

时间:2017-07-24 14:28:43

标签: java compare cucumber comparator gherkin

我正在寻找一种基于用Cucumber / Gherkin格式编写的动态属性来比较Java中对象的方法。

有没有人实现过这样的事情或知道可以实现这个目标的框架?

以下是我正在尝试做的一个例子:

cucumber.feature

Feature: Cucumber Feature 1

  Scenario: Test 1
    Given my micro-service is up and running
    When I submit something to my API
    Then I verify the response object looks like this:
      | property1 | value1 |
      | property3 | value3 |
      | property5 | value5 |

StepDefinitions.java

public class StepDefinitions {

    private ResponseObject storedResponseObject;

    @Given("^my micro-service is up and running$")
    public void given() throws Throwable {
        ...
    }

    @When("^I submit something to my API$")
    public void when() throws Throwable {
        storedResponseObject = postSomethingToAPI();
    }

    @Then("^I verify the response object looks like this:$")
    public void then(Map<String, String> gherkinMap) throws Throwable {
        ObjectMapper objectMapper = new ObjectMapper();
        ResponseObject expectedResponseObject = objectMapper.convertValue(gherkinMap, ResponseObject.class);
        ResponseObject actualResponseObject = storedResponseObject;
        Assert.assertEquals(expectedResponseObject, actualResponseObject);
    }
}

ResponseObject.java

public class ResponseObject {

    private String property1;
    private String property2;
    private String property3;
    private String property4;
    private String property5;

    public String getProperty1() {
        return property1;
    }

    public void setProperty1(String property1) {
        this.property1 = property1;
    }

    public String getProperty2() {
        return property2;
    }

    public void setProperty2(String property2) {
        this.property2 = property2;
    }

    public String getProperty3() {
        return property3;
    }

    public void setProperty3(String property3) {
        this.property3 = property3;
    }

    public String getProperty4() {
        return property4;
    }

    public void setProperty4(String property4) {
        this.property4 = property4;
    }

    public String getProperty5() {
        return property5;
    }

    public void setProperty5(String property5) {
        this.property5 = property5;
    }
}

注意 - Assert.assertEquals()显然不起作用。

有什么想法吗?

谢谢,

Ben:)

1 个答案:

答案 0 :(得分:1)

覆盖equals中的ResponseObject方法。在overrided方法中实现比较逻辑。

修改

正如@Wietlol注意到的那样,也要覆盖hashcode方法。有关详细信息,请参阅此处In Java, why must equals() and hashCode() be consistent?