Используя Moq, у меня очень странная проблема, когда настройка на макет только работает, если метод, который я настраиваю, является общедоступным. Я не знаю, является ли это ошибкой Moq, или если я просто ошибаюсь (новичок в Moq). Вот тестовый пример:
public class TestClass
{
public string Say()
{
return Hello();
}
internal virtual string Hello()
{
return "";
}
}
[TestMethod]
public void Say_WhenPublic_CallsHello()
{
Mock<TestClass> mock = new Mock<TestClass>();
mock.Setup(x => x.Hello()).Returns("Hello World");
string result = mock.Object.Say();
mock.Verify(x => x.Hello(), Times.Exactly(1));
Assert.AreEqual("Hello World", result);
}
Что не удается с этим сообщением:
Say_WhenPublic_CallsHello не удалось: Moq.MockException: Вызов не выполнялся на макет 1 раз: x = > x.Hello() в Moq.Mock.ThrowVerifyException(ожидаемый IProxyCall, выражение Expression, времена раз)...
Если я сделаю общедоступным метод Hello, тест пройдет. В чем проблема?
public virtual string Hello()
{
return "";
}
Спасибо заранее!