Я прошел все предыдущие ответы, и ни один из них не решил мою проблему.
Допустим, у меня есть следующий код:
public interface ISomeInterface
{
int SomeMethod(int a, string b);
}
Теперь у меня есть общий класс насмешкиэто определяет поведение по умолчанию для вышеуказанного метода
public class CommonMock
{
public Mock<ISomeInterface> MockInterface = new Mock<ISomeInterface>().Setup(x => x.SomeMethod(It.IsAny<int>(), It.IsAny<string>())).Returns(It.IsAny<int>());
}
Мне нужно поведение по умолчанию, потому что у меня есть целый ряд тестовых случаев, которые требуют поведения по умолчанию.
Но в некоторых конкретных тестовых сценарияхв совершенно отдельном тестовом классе мне нужно иметь возможность возвращать другое значение, так как я тестирую какой-то конкретный тестовый пример.
Примерно так:
[Test]
public void TestSomeMethodSpecific()
{
var commonMock = new CommonMock();
commonMock.MockInterface.Setup(x => x.SomeMethod(It.IsAny<int>(), It.IsAny<string>())).Returns(42);
// Do some test based on the new return value
}
Как мне этого добиться?
Ниже я прилагаю немного фактического кода:
Общая настройка
public class MockStore
{
public Mock<IProcessHandler> ProcessHandler = new Mock<IProcessHandler>();
ProcessHandler.Setup(x => x.GetCurrentProcessRunId()).Returns(It.IsAny<int>());
}
Переопределенная настройка в тестовом классе
var mockstore = new MockStore();
mockStore.ProcessHandler.Setup(x => x.GetCurrentProcessRunId()).Returns(25);
Исуществует почти от 50 до 70 таких издевательств, каждое из которых возвращается от простых типов к сложным классам.