Я пытаюсь выполнить модульное тестирование действия контроллера, использующего поставщика членства для обновления сведений о пользователе. Я использую Moq, который до сих пор был прост в использовании.
Проблема в том, что я не могу заставить его высмеивать вызовы методов, которые ничего не возвращают.
<TestMethod()> _
Public Sub Can_Update_User()
' Arrange
_membershipService.Setup(Function(x) x.UpdateUser(It.IsAny(Of MembershipUser)))
Dim controller As New UsersController(_membershipService.Object, _roleProvider.Object, _supportWorksService.Object, _portalClientService.Object)
' Act
Dim result As ViewResult = controller.Edit("testUser", New FormCollection)
' Assert
Assert.AreEqual("Index", result.ViewName)
End Sub
Настройка службы проверки на членство не компилируется, ошибка:
Не удалось разрешить перегрузку, потому что нет
доступный «Настройка» можно вызвать с
эти аргументы:
'Публичная функция
Setup (Of TResult) (выражение As
System.Linq.Expressions.Expression (Из
System.Func (Из
Services.IMembershipService,
TResult))) как
Moq.Language.Flow.ISetup (Из
Services.IMembershipService,
TResult) ': выражение не производит
ценность.
'Настройка публичных функций (из
TResult) (выражение As
System.Linq.Expressions.Expression (Из
System.Func (Из
Services.IMembershipService,
TResult))) как
Moq.Language.Flow.ISetup (Из
Services.IMembershipService,
TResult) ': Тип (ы) данных типа
параметр (ы) не может быть выведен из
эти аргументы. Указание данных
Тип (ы) явно может исправить это
ошибка.
'Публичная функция
Настройка (выражение As
System.Linq.Expressions.Expression (Из
System.Action (Из
Services.ImmbershipService))) As
Moq.Language.Flow.ISetup (Из
Services.IMembershipService) ':
Выражение не дает значения.
Что я пропустил? Должен ли я создавать поддельный класс вместо использования Moq всякий раз, когда в моем классе есть метод, который я хочу вызвать?
Edit:
Хорошо, небольшое прочтение предполагает, что это связано с тем, как лямбда-выражения выражаются в VB с использованием функции (), которая должна иметь результат.
Кто-нибудь нашел способ обойти это или мне придется отказаться от Moq для подделки?