Я думаю, что вы, возможно, немного неправильно понимаете цель тестирования с помощью макетов в двух предоставленных вами сценариях.
В первом сценарии вы хотите проверить, что 1 возвращается, когда вы переходите на «Ямайку». Это не фиктивный тестовый пример, а тестовый пример для реального поведения, так как вы хотите протестировать определенный ввод с ожидаемым выводом, например, «Ямайка» -> 1. В этой ситуации имитация более полезна для обеспечения того, чтобы ваша служба внутри вызывала SaveCountry хранилище с ожидаемой страной и которое возвращает значение из вызова.
Ключевым моментом является настройка вашего дела «SaveCountry», а затем вызов «VerifyAll» на макете. Это будет утверждать, что «SaveCountry» действительно был вызван со страной «Ямайка», и что ожидаемое значение возвращается. Таким образом, вы уверены, что ваш сервис подключен к вашему хранилищу, как и ожидалось.
[Test]
public void adding_country_saves_country()
{
const int ExpectedCountryId = 666;
var mockRepository = new Mock<IGeographicRepository>();
mockRepository.
Setup(x => x.SaveCountry(It.Is<Country>(c => c.CountryName == "Jamaica"))).
Returns(ExpectedCountryId);
GeographicService service= new GeographicService(mockRepository.Object);
int id = service.AddCountry(new Country("Jamaica"));
mockRepo.VerifyAll();
Assert.AreEqual(ExpectedCountryId, id, "Expected country id.");
}
Во втором сценарии вы хотите проверить, возникает ли исключение при попытке добавить дублирующуюся страну. Делать это с макетом не имеет особого смысла, так как все, что вы будете проверять, это то, что ваш макет ведет себя при добавлении дубликатов, а не в реальной реализации.