代码之家  ›  专栏  ›  技术社区  ›  IAdapter

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

  •  0
  • IAdapter  · 技术社区  · 14 年前

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

    现在我这样做

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

    如果返回了错误的电子邮件,我就无法知道它是否有正确的商店,我希望得到一个错误字段的列表。

    5 回复  |  直到 13 年前
        1
  •  1
  •   Sam Holder Brian Adams    14 年前

    使用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);
    }
    

    显然,您需要将对象的设置移动到一个方法中,而不是让它在测试设置方法中执行,并让它成为一个类变量。

    如果您真的想测试是否在单个测试中设置了所有属性:

    @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方法填充一个内部列表,如果相等性检查失败,可以查询该列表,以获取上次检查相等性时失败字段的列表。不过,不要真的认为这是个好主意。

        2
  •  1
  •   Winter    14 年前
        3
  •  1
  •   Community CDub    7 年前
        4
  •  1
  •   atamur    13 年前

    我会去找汉克雷斯特的媒人。它们允许我编写这样的代码:

    assertThat(obj, hasProperty("email", equalTo("ha@gmail.com")));
    
        5
  •  0
  •   Paul McKenzie    14 年前

    如果您想要测试对象相等性,那么您肯定需要实现equals()并使用assertequals()测试,否则sam是正确的,每个测试一个断言。