Mocking VB.NET Methods with Moq

Próbuję przetestować działanie kontrolera, które wykorzystuje dostawcę członkostwa do aktualizacji danych użytkownika. Używam Moq, który do tej pory był łatwy w użyciu.

Problem polega na tym, że wydaje mi się, że nie udaje mu się kpić z połączeń do metod, które niczego nie zwracają.

<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

Konfiguracja szyderczej usługi członkostwa nie zostanie skompilowana, błąd jest następujący:

Rozdzielczość przeciążenia nie powiodła się, ponieważ nie można wywołać dostępnego „Instalatora” z tymi argumentami:

'Public Function Setup (Of TResult) (wyrażenie As System.Linq.Expressions.Expression (Of System.Func (Of Services.IMembershipService, TResult))) As Moq.Language.Flow.ISetup (Of Services.IMembershipService, TResult)' : Wyrażenie nie tworzy wartości.

'Public Function Setup (Of TResult) (wyrażenie As System.Linq.Expressions.Expression (Of System.Func (Of Services.IMembershipService, TResult))) As Moq.Language.Flow.ISetup (Of Services.IMembershipService, TResult)' : Typów danych parametru (-ów) typu nie można wywnioskować z tych argumentów. Określenie typu danych bezpośrednio może poprawić ten błąd.

'Public Function Setup (wyrażenie jako System.Linq.Expressions.Expression (Of System.Action (Of Services.IMembershipService)))) Jak Moq.Language.Flow.ISetup (Of Services.IMembershipService)': Wyrażenie nie tworzy wartości.

Co przegapiłem? Czy będę musiał stworzyć fałszywą klasę, zamiast używać Moqa w każdej chwili, gdy moja klasa ma metodę, na którą chcę zadzwonić?

Edytować:

Ok, trochę czytania wokół sugeruje, że wynika to ze sposobu, w jaki lambdy są wyrażane w VB przy użyciu Function (), który musi mieć wynik.

Czy ktoś znalazł jakieś rozwiązanie, czy będę musiał pozbyć się Moqa za fałszywe metody?

questionAnswers(4)

yourAnswerToTheQuestion