断言两个java bean是等价的

rip*_*234 13 java unit-testing assert equality javabeans

这个问题很接近,但仍然不是我想要的.我想以通用的方式断言两个bean对象是等价的.如果它们不是,我想要一个详细的错误消息来解释差异而不是布尔"等于"或"不等于".

Cho*_*meh 16

import static org.hamcrest.beans.SamePropertyValuesAs.samePropertyValuesAs;
import static org.junit.Assert.assertThat;

@Test
public void beansAreTheSame(){
    MyDomianClass bean1 = new MyDomainClass();
    MyDomianClass bean2 = new MyDomainClass();
    //TODO - some more test logic

    assertThat(bean1, samePropertyValuesAs(bean2));
}
Run Code Online (Sandbox Code Playgroud)


gav*_*koa 13

我建议你使用unitils库:

http://www.unitils.org/tutorial-reflectionassert.html

public class User {

    private long id;
    private String first;
    private String last;

    public User(long id, String first, String last) {
        this.id = id;
        this.first = first;
        this.last = last;
    }
}
User user1 = new User(1, "John", "Doe");
User user2 = new User(1, "John", "Doe");
assertReflectionEquals(user1, user2);

也可以看看:


Aar*_*lla 5

您可以使用一般语言ToStringBuilder他们两个转换成可读的字符串,然后用assertEquals()两个字符串。

如果您喜欢 XML,您可以使用java.lang.XMLEncoder将您的 bean 转换为 XML,然后比较两个 XML 文档。

就我个人而言,我更喜欢ToStringBuilder它,因为它可以让您更好地控制格式,并允许您执行诸如对集合中的元素进行排序以避免误报之类的操作。

我建议将 bean 的每个字段放在不同的行中,以便比较它们更简单(有关详细信息,请参阅我的博客)。