У меня есть класс, который содержит общедоступный метод, который опирается на внутренний метод, чтобы правильно вернуть его значение.Частичный издевательский внутренний метод класса с Moq
Давайте рассмотрим следующий класс и тестовый файл:
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 или некоторые ограничения?
Проверить этот пост: http://stackoverflow.com/questions/1458300/moq-how-do-you-test-internal-methods – Blindsniper
Thx @Blindsniper, но моя проблема не об издевательстве «внутреннего» метода просто. Как я уже сказал, я использовал директиву InternalsVisibleTo, но по какой-то причине тест останавливается после изменения его внутреннего. –
Похоже, он должен работать. Вы не получаете от Мока исключения из-за насмешки недосягаемого члена? Тогда 'Setup' должен работать. Что произойдет, если вы не установите 'CallBase = true'? –