У меня есть класс, содержащий общедоступный метод, который полагается на внутренний метод, чтобы правильно вернуть его значение.
Рассмотрим следующий класс и тестовый файл:
public class ClassUnderTest
{
public string NotMockedPublicMethod()
{
return MockedMethod();
}
virtual public string MockedMethod()
{
return "original";
}
}
Следующий тестовый пример будет работать:
var mock = new Mock<ClassUnderTest> { CallBase = true };
mock.Setup(m => m.MockedMethod()).Returns("mocked");
Assert.AreEqual("mocked", mock.Object.NotMockedPublicMethod());
Но скажем, этот мой MockedMethod()
не имеет никакой внешней полезности. Проблема в том, что пометка этого метода как internal
(даже при правильном использовании InternalsVisibleTo()
):
virtual internal string MockedMethod()
сделает точно такой же тест неудачным с сообщением Assert.AreEqual failed. Expected:<mocked>. Actual:<original>
.
Это ошибка Moq или какое-то ограничение?
internal
. Как я уже сказал, я использовал директивуInternalsVisibleTo
, но по какой-то причине тест перестал выполняться после изменения ее на внутреннюю. - person Caio Cunha   schedule 04.01.2014Setup
должен работать. Что произойдет, если вы не установитеCallBase = true
? - person Jeppe Stig Nielsen   schedule 04.01.2014InternalsVisibleTo
, я не знал, что я также должен сделать его видимым для прокси-сборки. Теперь это работает. - person Caio Cunha   schedule 05.01.2014