Я хочу установить возвращаемое значение для вызова с любыми аргументами, кроме одного указанного случая, и другого возвращаемого значения для этого одного случая. Предоставляет ли следующий код ожидаемое поведение? Пройдет ли тест? И гарантируется ли это для другой возможной ситуации, которая следует за описанной структурой?
interface ISomeInterface
{
int SomeMethod(string param);
}
[TestMethod]
public void SomeClass_ShouldBehaveProperly_GivenSomeScenario()
{
var mock = new Mock<ISomeInterface>(MockBehavior.Strict);
mock.Setup(m => m.SomeMethod(It.IsAny<string>()))
.Returns(1);
mock.Setup(m => m.SomeMethod("aSpecificString"))
.Returns(100);
Assert.AreEquel(100, mock.Object.SomeMethod("aSpecificString"));
Assert.AreEquel(1, mock.Object.SomeMethod("anyString"));
}
А как насчет смешанных установок, например, когда мы устанавливаем «выдает исключение» для любого аргумента, но «возвращает значение» для некоторых указанных ?
mock.Setup(m => m.SomeMethod(It.IsAny<string>()))
.Throws<Exception>();
mock.Setup(m => m.SomeMethod("aSpecificString"))
.Returns(100);
Какое поведение ожидается от настройки, представленной в последнем примере кода?
Из принятого ответа на этот вопрос Я знаю, что
Последний вызов выигрывает и аннулирует предыдущие вызовы
Но, мы имеем такое же поведение, когда установки в обратном порядке?