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

标签 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);
}

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

关于java - 用于 bean 比较的单元测试框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2881938/

相关文章:

node.js - 在 Karma 的运行器中包含 Jasmine Node 文件

java - Junit:使用 PowerMock 的 MethodNotFoundException

使用 Arquillian 进行 Java 集成测试、数据库清理

java - 错误: Class not found AnnotationConfigWebApplicationContext

Java优化: declaring class variables VS using temporary variables

java - 如何在mockito中模拟Class.forName()

python - 如何使用多个后端运行相同的单元测试套件

java - 使用 @ParameterizedTest 和 @MethodSource 或 @ValueSource 对多个类运行相同的 JUnit 测试

java - 模拟可选参数时出现空指针异常

java - .vimrc 中的示例 neocomplcache 设置适用于 MacVim,但不适用于 Linux 控制台 vim