【问题标题】:I have an apache camel test case which is failing because of different object instances getting created. The object instances are having different IDs我有一个 apache camel 测试用例,由于创建了不同的对象实例而失败。对象实例具有不同的 ID
【发布时间】:2020-12-13 07:49:15
【问题描述】:

以下是我得到的错误 -

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>

我的类的配置如下-

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = CustomerNotificationSchedulerApplication.class)
public class PrepareEmailReminderBodyRouteTest {


    @Autowired
    private CamelContext camelContext;

    @Produce(uri = "direct:prepareEmailReminder")
    private ProducerTemplate producer;

    @EndpointInject(uri = "mock:send")
    private MockEndpoint mockSendEndpoint;

    @Autowired
    private EmailNotificationRequestConfiguration emailNotificationRequestConfiguration;

    @Before
    public void before() throws Exception {
        camelContext.getRouteDefinition("prepareEmailReminderRoute").adviceWith(camelContext, new AdviceWithRouteBuilder() {
            @Override
            public void configure() throws Exception {
                interceptSendToEndpoint("direct:sendEmail")
                        .skipSendToOriginalEndpoint()
                        .to(mockSendEndpoint);
            }
        });
    }

这是在 mockSendEndpoint.expectedBodiesReceived(request); 失败的失败测试用例 -

@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();
}

如何断言这些对象实例?有什么办法吗?还是我在这里做错了什么?

也仅供参考, 我正在使用新的 EmailNotificationRequest 在处理器中设置交换正文。

【问题讨论】:

    标签: unit-testing junit mockito apache-camel springjunit4classrunner


    【解决方案1】:

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

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

    如果您希望能够直接比较它们,则必须使用EmailNotificationRequest 类型的implement equals and hashcode methods

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

    为此,您可以像这样从Camel Mock获取收到的交流

    List<Exchange> messages = mockSendEndpoint.getReceivedExchanges()
    

    然后,您可以从列表中获取一条消息或遍历所有消息,以将主题、收件人、发件人等与预期值进行比较。

    【讨论】:

    • 感谢您的回答 burki。但是我已经在EmailNotificationRequest 类中实现了equals & hashcode 方法。问题是别的。
    【解决方案2】:

    我觉得这个错误有点误导。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-19
      • 2015-12-31
      • 2020-04-18
      • 2021-11-24
      • 1970-01-01
      • 1970-01-01
      • 2020-11-21
      • 1970-01-01
      相关资源
      最近更新 更多