J'essaie de tester unitaire une action du contrôleur qui utilise le fournisseur d'appartenance pour mettre à jour les détails de l'utilisateur. J'utilise Moq qui jusqu'ici a été facile à utiliser. Le problème est que je ne peux pas sembler l'obtenir pour se moquer des appels à des méthodes qui ne renvoient rien.Mocking Méthodes VB.NET avec 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
La configuration du service d'adhésion moquée ne compile pas, l'erreur est:
résolution de surcharge a échoué car aucun 'Configuration' accessible peut être appelé avec ces arguments:
'Fonction publique Setup (Of TResult) (expression As System.Linq.Expressions.Expression (Of System.Func (Of Services.IMembershipServic e, TResult))) Comme Moq.Language.Flow.ISetup (Of Services.IMembershipService, TResult) ': L'expression ne produit pas une valeur.
« Configuration de la fonction publique (de TResult) (expression Comme System.Linq.Expressions.Expression (de System.Func (de Services.IMembershipService, TResult))) Comme Moq.Language.Flow. ISetup (Of Services.IMembershipService, TResult) ': Le (s) type (s) de données du type paramètre (s) ne peuvent être déduits de ces arguments. Spécifier les données type (s) explicitement corriger cette erreur .
« Fonction publique Setup (expression Comme System.Linq.Expressions.Expression (de System.Action (de Services.IMembershipService))) Comme Moq.Language.Flow.ISetup (de Services.IMembershipService) ': L'expression n'a pas de valeur.
Qu'est-ce que j'ai manqué? Est-ce que je vais devoir créer une fausse classe plutôt que d'utiliser Moq chaque fois que ma classe a une méthode que je veux appeler?
Edit:
Ok, un peu de lecture suggère de contourner cela est dû à la façon lambdas sont exprimés en VB en utilisant la fonction() qui doit avoir un résultat.
Est-ce que quelqu'un a trouvé un travail pour cela ou vais-je devoir abandonner le Moq pour fausser les méthodes?
:(Honte vraiment, en dehors de cela, j'adore vraiment Moq .Si je suggère au patron que nous retardons le développement pour une autre année afin qu'ils puissent sortir VB10 je pense qu'il va me tuer! – Nick