预期的JUnit断言错误和实际显示的是同一件事

时间:2019-06-12 16:08:58

标签: java junit

我在Assertionerror中的期望值和实际值都显示相同的内容。它们是相同的参考。有人知道为什么以及如何解决吗?下面的代码和错误。预先感谢:

@Test
public void test_CreateAUserWritesAFileReadsFilePrintsFile() throws IOException {
    //Arrange
    WriteCommand fwc = new FileWriteCommand();
    ReadCommand frc = new FileReadCommand();
    RegistrationController rc = new RegistrationController();
    User user = new User("Jerry", "123", "Engineer");
    rc.registerNewUser("Jerry", "123", "Engineer");
    fwc.writeUser(user);
    User one = frc.readUser("Jerry");
    System.out.println(one);
    User expected = one;

    //Act
    User actual = user;

    //Assert
    assertEquals(expected, actual);

}

错误

java.lang.AssertionError: expected: com.fdmgroup.userregistration.User<User [username=Jerry, password=123, role=Engineer]> but was: com.fdmgroup.userregistration.User<User [username=Jerry, password=123, role=Engineer]>

2 个答案:

答案 0 :(得分:5)

这是因为User user = new User("Jerry", "123", "Engineer");正在创建一个新的User对象,而User one = frc.readUser("Jerry");也正在创建一个新的User对象。这两个对象的字段值相同,但两个对象不同。但是,您可以通过执行此操作来断言。

assertThat(user).isEqualToComparingFieldByField(one);

答案 1 :(得分:0)

字段具有相同的值,但是要比较的对象不同。

在对象的字段之间声明等效性应该成功,并且除非我完全误解了您要测试的内容,否则它是正确的。