The Author Online Book Forums are Moving

The Author Online Book Forums will soon redirect to Manning's liveBook and liveVideo. All book forum content will migrate to liveBook's discussion forum and all video forum content will migrate to liveVideo. Log in to liveBook or liveVideo with your Manning credentials to join the discussion!

Thank you for your engagement in the AoF over the years! We look forward to offering you a more enhanced forum experience.

lucacin (5) [Avatar] Offline
Listing 3.1 is labeled as "Stubbing" and in the code shown the class is called MailServiceStub. I think it's not correct as it's a Spy not a Stub according to previous definition.

Best regards and thanks for this great book
Ted M. Young (1) [Avatar] Offline
According to the definitions, it looks exactly like a Fake (because it is storing the message in memory, so provides working behavior). A stub would be something like

public class MailServiceStub implements MailService {

  void sendEmail(Message msg) {

  boolean hasSentMessage(Message msg) {
    return true;


This is injecting "predefined answers" to the hasSentMessage call.
Andy Gumbrecht (9) [Avatar] Offline
Good catches! I really wish I'd seen this earlier.

Thanks for the feedback.

274150 (1) [Avatar] Offline
Well actually the line between spies and stubs are so thin, and a Spy is (or can be) considered a Stub as well, so usually, I call Stubs to any real Stub or Spy. If you want to read more about this topic in a different source of the book here is a link

Notice this "Spies are stubs that also record ...."