"Vazio" métodos vazios com Moq?

Recentemente, minha equipe tomou a decisão de usar o Moq como nossa estrutura de zombaria por sua tremenda flexibilidade e sintaxe altamente legível. Como somos novos, estou tropeçando no que parecem ser perguntas simples - buscas (aqui, Google, etc.) encontram muitas discussões sobre outras nuances de Moq, mas não necessariamente o que eu estou procurando, e as poucas questões aparentemente relacionadas se transformaram em pistas falsas.

Estamos testando uma classe que tem uma dependência externa (o Amazon SimpleDb para ser preciso), mas não queremos que nossos testes limitem a conexão ao vivo. Um método particular:

Aplica alguma lógica de "negócios"Se apropriado, invoca uma chamada para o SDB através de um provedor que construímos, vamos chamá-loSaveItem()

Eu quero testar a unidade de tal forma que nós configurar o contexto necessário e garantir queSaveItem() foi invocado, mas de uma maneira queSaveItem() realmente não é invocado (porque A) o provedor para SDB é um mock que não é totalmente hidratado e provavelmente irá bombar e B) eu não quero ter que pagar por essa transação centenas e milhares de vezes).

Ao lidar com métodos que retornavam um valor, isso era trivial.

mockDb.Setup(d => d.GiveMeSomething()).Returns("Foo");

No caso que eu delinear acima, porém, meu "SaveItem()"método é nulo e, portanto, a opção de usar Moq'sReturns() método não está disponível. E enquanto eu posso configurar um retorno de chamada para verificarSaveItem() é invocado, no entanto, não consigo fazer com que ele realmente não faça nada.

Ingênuo / esperançoso, achei que o seguinte funcionaria, mas parece que ainda invoco o método:

mockDb.Setup(d => d.SaveItem(It.IsAny<object>()));

Então, a pergunta de um milhão de dólares: qual é o Moq do seguinte código fictício?

mockDb.Setup(d => d.SaveItem(It.IsAny<object>())).STOP_RIGHT_HERE();

questionAnswers(1)

yourAnswerToTheQuestion