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?