JUnit最佳实践

时间:2016-06-20 04:57:22

标签: java junit message-queue amazon-sqs

我正在编写一个内存实现的队列服务(类似于Amazon SQS),用于本地测试。

根据规范,非空队列上的pull()调用不必返回消息。如果只有一个消费者,我的内存中实现将始终返回一条消息。因此,第一个测试用例(在SQS规范方面是正确的)显然是无用的,即使是一个空的pull()实现总是返回null也会传递:

@Test
public void testPushAndPullBySpec() {//useless
    QueueService qs = new InMemoryQueueService();

    qs.push("TEST_MSG_1");

    Message message = qs.pull();
    Assert.assertTrue(message == null || message.getBody().equals("TEST_MSG_1"));
    if (message != null) {
        qs.delete(message.getReceiptHandle());
    }
}

此实现看起来很有意义,但它实际上与规范相矛盾,不能与其他实现一起使用:

@Test
public void testPushAndPullByImpl() {
    QueueService qs = new InMemoryQueueService();//could fail if another implementation was used

    qs.push("TEST_MSG_1");

    Message message = qs.pull();
    Assert.assertTrue(message.getBody().equals("TEST_MSG_1"));
    qs.delete(message.getReceiptHandle());
}

所以,我唯一的问题是:在这种情况下如何正确编写单元测试?

0 个答案:

没有答案