public interface IEmailService {
void Send(string message);
public static void Main()
var emailService = new Mock<IEmailService>();
String? passedMessage = null;
.Setup(a => a.Send(It.IsAny<string>()))
.Callback<string>(msg => {
var emailSender = new EmailSender("Hello", emailService.Object);
emailSender.SendTo("bill@microsoft.com");
Assert.AreEqual("Hello", passedMessage);
Console.WriteLine("Everything is awesome!");
public class EmailSender {
private IEmailService emailService;
public EmailSender(string body, IEmailService emailService) {
this.emailService = emailService;
public void SendTo(string emailAddress) {
emailService.Send(emailAddress);
public class SmtpEmailService : IEmailService
public void Send(string message)
public class FakeEmailService : IEmailService
public void Send(string message)