Kata Step Eight

Next test: Make sure we tell the Consumer to stop when our queue becomes empty.

BoundedQueueTest.cpp

TEST_F(BoundedQueueTest, DequeuePausesConsumerWhenQueueIsEmpty) {
        q.enqueue(3);
        EXPECT_CALL(consumer, Pause());
        q.dequeue();
}

See if you can make this pass, or read on:











BoundedQueue.h

        const T& dequeue() {
                consumer.Pause();
                ...
        }

Well, the test passes. But could we make it a better test?

How about if we test that Pause() only gets called when the queue becomes empty, not on every single dequeue()?

BoundedQueueTest.cpp

TEST_F(BoundedQueueTest, DequeuePausesConsumerWhenQueueIsEmpty) {
        q.enqueue(3);
        q.enqueue(6);
        EXPECT_CALL(consumer, Pause());
        q.dequeue();
        q.dequeue();
}

Verify that this does, indeed, fail.

See if you can make it pass, or read on:











BoundedQueue.h

        const T& dequeue() {
                const T& item = q.front();
                q.pop();
                if (q.size() == 0) {
                        consumer.Pause();
                }
                return item;
        }

A green bar we can be happy with.

Go on to BoundedQueueKataStepNine.... or go back

BoundedQueueKataStepEight (last edited 2010-01-17 00:50:36 by KayJohansen)