Я пытаюсь выполнить модульное тестирование класса, который получает зависимость интерфейса от библиотеки взаимодействия COM.
Тестируемый метод:
public void ConfigureAuth(IRequestProcessor5 processor)
{
processor.AuthPreferences.PutIsReadOnly(false);
// more configuration statements...
}
Я действительно хочу использовать здесь рекурсивные макеты, поскольку я не контролирую форму кода COM.Моя первая попытка:
[Fact]
public void ConfigureAuth_SetsReadOnlyToFalse()
{
var mockProcessor = new Mock<IRequestProcessor5>{DefaultValue = DefaultValue.Mock};
_testSubject.ConfigureAuth(mockProcessor.Object);
mockProcessor.Verify(p => p.AuthPreferences.PutIsReadOnly(false));
}
При этом выдается следующее исключение (из вызова проверки в тесте):
System.InvalidOperationException переменная 'p' типа 'QBXMLRP2Lib.RequestProcessor3'ссылка из области видимости' ', но она не определена.
Мое первоначальное предположение заключалось в том, что рекурсивный макет работает, но в выражении Verify
происходило что-то странное, поэтому я попытался закомментироватьVerify
чтобы проверить это предположение.Затем выдается следующее исключение (из тестируемого метода):
System.MissingMethodException Ошибка: отсутствует экземпляр класса метода QBXMLRP2Lib.IAuthPreferences [MyProject] QBXMLRP2Lib.IRequestProcessor5 :: get_AuthPreferences () из класса'Castle.Proxies.IRequestProcessor5Proxy'.
Таким образом, рекурсивная насмешка, по-видимому, не работает.Кроме того, даже при использовании макетов в режиме Loose
, MissingMethodException
выбрасывается, если не указано Setup()
.
Что происходит и как я могу это исправить?