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
