Java 用于bean比较的单元测试框架

Java 用于bean比较的单元测试框架,java,unit-testing,junit,Java,Unit Testing,Junit,有没有比较整个对象的好框架 现在我知道了 assertEquals("ha@gmail.com", obj.email); assertEquals("5", obj.shop); 如果返回了错误的电子邮件,我永远不知道它是否有正确的商店,我想得到一个不正确字段的列表。按照1测试,1断言思路如果您在自己的测试中有每个断言,您将知道是否有一个或两个都失败了,因为有1个或2个测试失败 @Test public void TestEmail() { obj = GetTestObject()

有没有比较整个对象的好框架

现在我知道了

assertEquals("ha@gmail.com", obj.email);
assertEquals("5", obj.shop);

如果返回了错误的电子邮件,我永远不知道它是否有正确的商店,我想得到一个不正确字段的列表。

按照1测试,1断言思路如果您在自己的测试中有每个断言,您将知道是否有一个或两个都失败了,因为有1个或2个测试失败

@Test
public void TestEmail()
{
    obj = GetTestObject();
    assertEquals("ha@gmail.com", obj.email);
}

@Test
public void TestShop()
{
    obj = GetTestObject();
    assertEquals("5", obj.shop);
}
显然,您需要将对象的设置移动到一个方法中,并在testsetup方法中执行它,并将其作为一个类变量

如果确实要测试是否在单个测试中设置了所有属性:

@Test
public void TestAllProperties()
{
    obj = GetTestObject(); 
    bool testResult=true;
    string failureString;
    if "ha@gmail.com".equals( obj.email) == false
    {
         testResult=false;
         failureString+="email was different";
    }
    if "5".equals( obj.shop) == false
    {
         testResult=false;
         failureString+="shop was different";
    }
    assertTrue(testResult,failurestring);
}
但我不确定这到底给了你什么

但是,如果您真的想比较整个对象的相等性,那么就重写equals方法(不要忘记getHashCode),并在其中执行相等性检查。毕竟这就是它的目的


如果您想要一个不正确字段的列表,您可以让equals方法填充一个内部列表,如果相等性检查失败,您可以查询该列表,以获取上次检查相等性时失败字段的列表。不过,不要真的认为这是个好主意。

使用1个测试,1个断言的思路如果您在自己的测试中使用了每个断言,那么您就会知道其中一个或两个都失败了,因为有1个或2个测试失败

@Test
public void TestEmail()
{
    obj = GetTestObject();
    assertEquals("ha@gmail.com", obj.email);
}

@Test
public void TestShop()
{
    obj = GetTestObject();
    assertEquals("5", obj.shop);
}
显然,您需要将对象的设置移动到一个方法中,并在testsetup方法中执行它,并将其作为一个类变量

如果确实要测试是否在单个测试中设置了所有属性:

@Test
public void TestAllProperties()
{
    obj = GetTestObject(); 
    bool testResult=true;
    string failureString;
    if "ha@gmail.com".equals( obj.email) == false
    {
         testResult=false;
         failureString+="email was different";
    }
    if "5".equals( obj.shop) == false
    {
         testResult=false;
         failureString+="shop was different";
    }
    assertTrue(testResult,failurestring);
}
但我不确定这到底给了你什么

但是,如果您真的想比较整个对象的相等性,那么就重写equals方法(不要忘记getHashCode),并在其中执行相等性检查。毕竟这就是它的目的


如果您想要一个不正确字段的列表,您可以让equals方法填充一个内部列表,如果相等性检查失败,您可以查询该列表,以获取上次检查相等性时失败字段的列表。不过,不要真的认为这是个好主意。

如果你想测试对象的相等性,那么你肯定需要实现equals()并使用assertEquals()进行测试,但如果Sam是正确的,那么每个测试一个断言如果你想测试对象的相等性,那么你肯定需要实现equals()并使用assertEquals()进行测试,但是Sam是正确的,每个测试一个断言

您也可以实现可比较的接口


您还可以实现类似的接口


这对我有帮助
这对我有帮助

我会选择汉克雷斯特匹配者。它们允许我编写如下代码:

assertThat(obj, hasProperty("email", equalTo("ha@gmail.com")));

我会选择汉克雷斯特匹配者。它们允许我编写如下代码:

assertThat(obj, hasProperty("email", equalTo("ha@gmail.com")));

重复:重复:我个人不喜欢汉克雷斯特。对我来说,它看起来像是无用的文本。为什么不只是assertEquals(obj.getEmail(),”ha@gmail.com"); 它短多了!对我来说,它看起来像是为了好玩而编写额外的代码(加上静态导入!)。为什么hamcrest不是一个无用的文本=)有很多原因。首先,你的意图要干净得多,然后当它失败时,你会得到一个有意义的错误,而不是一个通用的“AssertionError”,最重要的是它是可扩展的!有意义的错误听起来很酷,而且可以扩展。我会调查的,thx:)我个人不喜欢hamcrest。对我来说,它看起来像是无用的文本。为什么不只是assertEquals(obj.getEmail(),”ha@gmail.com"); 它短多了!对我来说,它看起来像是为了好玩而编写额外的代码(加上静态导入!)。为什么hamcrest不是一个无用的文本=)有很多原因。首先,你的意图要干净得多,然后当它失败时,你会得到一个有意义的错误,而不是一个通用的“AssertionError”,最重要的是它是可扩展的!有意义的错误听起来很酷,而且可以扩展。我会调查的,谢谢:)