Verspotten von VB.NET-Methoden mit Moq
Ich versuche, eine Controller-Aktion zu testen, bei der der Mitgliedschaftsanbieter zum Aktualisieren der Benutzerdetails verwendet wird. Ich benutze Moq, das bisher einfach zu bedienen war.
Das Problem ist, dass ich es scheinbar nicht schaffen kann, Aufrufe von Methoden zu verspotten, die nichts zurückgeben.
<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
Das Setup des gespielten Mitgliedschaftsdienstes wird nicht kompiliert. Der Fehler lautet:
Die Überladungsauflösung ist fehlgeschlagen, da mit den folgenden Argumenten kein zugängliches 'Setup' aufgerufen werden kann:
'Public Function Setup (Of TResult) (Ausdruck As System.Linq.Expressions.Expression (Of System.Func (Of Services.IMembershipService, TResult)) As Moq.Language.Flow.ISetup (Of Services.IMembershipService, TResult)' : Ausdruck erzeugt keinen Wert.
'Public Function Setup (Of TResult) (Ausdruck As System.Linq.Expressions.Expression (Of System.Func (Of Services.IMembershipService, TResult)) As Moq.Language.Flow.ISetup (Of Services.IMembershipService, TResult)' : Aus diesen Argumenten können Datentypen vom Typ Parameter nicht abgeleitet werden. Durch die explizite Angabe der Datentypen kann dieser Fehler möglicherweise behoben werden.
'Public Function Setup (Ausdruck als System.Linq.Expressions.Expression (von System.Action (von Services.IMembershipService))) als Moq.Language.Flow.ISetup (von Services.IMembershipService)': Ausdruck erzeugt keinen Wert.
Was habe ich vermisst? Muss ich eine gefälschte Klasse erstellen, anstatt Moq zu verwenden, wenn meine Klasse eine Methode hat, die ich aufrufen möchte?
Bearbeiten:
Ok, ein wenig herumlesen deutet darauf hin, dass dies auf die Art und Weise zurückzuführen ist, wie Lambdas in VB mit Function () ausgedrückt werden, was ein Ergebnis haben muss.
Hat jemand eine Lösung dafür gefunden oder muss ich Moq wegen falscher Methoden absetzen?