我在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]>
答案 0 :(得分:5)
这是因为User user = new User("Jerry", "123", "Engineer");
正在创建一个新的User对象,而User one = frc.readUser("Jerry");
也正在创建一个新的User对象。这两个对象的字段值相同,但两个对象不同。但是,您可以通过执行此操作来断言。
assertThat(user).isEqualToComparingFieldByField(one);
答案 1 :(得分:0)
字段具有相同的值,但是要比较的对象不同。
在对象的字段之间声明等效性应该成功,并且除非我完全误解了您要测试的内容,否则它是正确的。