Unit testing 我有一个apachecamel测试用例,由于创建了不同的对象实例而失败。对象实例具有不同的ID

Unit testing 我有一个apachecamel测试用例,由于创建了不同的对象实例而失败。对象实例具有不同的ID,unit-testing,junit,mockito,apache-camel,springjunit4classrunner,Unit Testing,Junit,Mockito,Apache Camel,Springjunit4classrunner,下面是我得到的错误- java.lang.AssertionError: mock://send Body of message: 0. Expected: <notification.scheduler.model.email.EmailNotificationRequest@943700a4> but was: <notification.scheduler.model.email.EmailNotificationRequest@c730128e> Expected

下面是我得到的错误-

java.lang.AssertionError: mock://send Body of message: 0. Expected: <notification.scheduler.model.email.EmailNotificationRequest@943700a4> but was: <notification.scheduler.model.email.EmailNotificationRequest@c730128e>
Expected :<notification.scheduler.model.email.EmailNotificationRequest@943700a4> 
Actual   :<notification.scheduler.model.email.EmailNotificationRequest@c730128e>
这是失败的测试用例,它在
mockSendEndpoint.expectedBodiesReceived(请求)失败-

@Test
@DirtiesContext
public void whenOneRevisionPropertyListIsRetrievedThenSendOneEmailWithEmailTemplate() throws Exception {
    Journal journal = new Journal();
    journal.setEmail("supportX@gmail.com");

    Author author = new Author();
    author.setEmail("mail@mail.to");

    SubmissionDAO sub = new SubmissionDAO();
    sub.setSubmissionId("111111111");
    sub.setRevision(1);
    sub.setJournal(journal);
    sub.setAuthors(Collections.singletonList(author));

    String email = sub.getJournal().getEmail();
    String[] fetchEmail = email.split(",");
    String fromEmail = fetchEmail[0];
    String bccEmail = emailNotificationRequestConfiguration.getBcc().get("default");
    List<String> bccEmails = StringUtils.isNotBlank(bccEmail) ? Arrays.asList(bccEmail.split(",")) : Collections.emptyList();
    
    EmailNotificationRequest request = new EmailNotificationRequest();
    request.setTo(Collections.singletonList("mail@mail.to"));
    request.setSubject("Incomplete submission to Biology, ID: 111111111");
    request.setFrom(fromEmail);
    request.setBcc(bccEmails);
    request.setBody(escapeHtml4(IOUtils.toString(getSystemResourceAsStream("revision-reminder.html"), UTF_8)));

    mockSendEndpoint.setExpectedMessageCount(1);
    mockSendEndpoint.expectedBodiesReceived(request);

    producer.send(ExchangeBuilder.anExchange(camelContext)
            .withProperty(ExchangeProperties.FILTERED_SUBMISSIONS_LIST_PROPERTY, Collections.singletonList(sub))
            .build());

    mockSendEndpoint.assertIsSatisfied();
}
@测试
@肮脏的环境
当NoneRevisionPropertyListivedSendOneEmailWithEmailTemplate()引发异常时,公共无效{
日记账=新日记账();
journal.setEmail(“supportX@gmail.com");
作者=新作者();
author.setEmail(“mail@mail.to");
SubmissionDAO sub=新SubmissionDAO();
分包商任务ID(“111111111”);
子条款修订(1);
附属日记账(日记账);
sub.setAuthors(Collections.singletonList(author));
字符串email=sub.getJournal().getEmail();
字符串[]fetchEmail=email.split(“,”);
String fromEmail=fetchEmail[0];
字符串bccEmail=emailNotificationRequestConfiguration.getBcc().get(“默认”);
List bccEmails=StringUtils.isNotBlank(bccEmail)?Arrays.asList(bccEmail.split(“,”):Collections.emptyList();
EmailNotificationRequest=新的EmailNotificationRequest();
request.setTo(Collections.singletonList(“mail@mail.to"));
请求。setSubject(“提交给生物学的文件不完整,ID:111111”);
request.setFrom(fromEmail);
请求。setBcc(bccEmails);
setBody(escapeHtml4(IOUtils.toString(getSystemResourceAsStream(“revision rementer.html”),UTF_8));
mockSendEndpoint.setExpectedMessageCount(1);
mockSendEndpoint.expectedBodiesReceived(请求);
producer.send(ExchangeBuilder.anExchange(camelContext)
.withProperty(ExchangeProperties.FILTERED_SUBMISSIONS_LIST_属性,Collections.singletonList(sub))
.build());
mockSendEndpoint.Assertessatified();
}
如何断言这些对象实例?有办法吗?还是我做错了什么

仅供参考,
我正在用一个新的EmailNotificationRequest在处理器中设置exchange主体。

AssertionError
抱怨两个对象实例不相等这是显而易见的,因为它们不是同一个实例

其中一个是在应用程序中创建的,另一个是在测试用例中创建的

如果您希望能够直接比较它们,则必须选择
电子邮件通知请求
类型

另一种方法是比较单个对象属性值,而不是整个实例(例如
subject

要做到这一点,您可以像这样从

List<Exchange> messages = mockSendEndpoint.getReceivedExchanges()
List messages=mockSendEndpoint.getReceivedExchanges()

然后,您可以从列表中提取一条消息,或遍历所有消息,将subject、to、from等与预期值进行比较。

我觉得这个错误有点误导

由于我正在设置和断言的请求主体,测试用例实际上失败了。在我的例子中,请求主体是一个HTML模板。我试图用一个错误的HTML模板来断言它


当我使用正确的HTML模板时,测试用例通过了。

感谢burki的回答。但是我已经在
EmailNotificationRequest
类中实现了equals&hashcode方法。这是另外一个问题。
List<Exchange> messages = mockSendEndpoint.getReceivedExchanges()