2009-02-13 10 views
2

Comment puis-je simuler une méthode avec RhinoMocks dans VB.Net? La référence que j'ai trouvé est en C#:Comment simuler une méthode (comportement personnalisé) avec Rhino Mocks dans VB.NET

Expect.Call(delegate{list.Add(0);}).IgnoreArguments() 
    .Do((Action<int>)delegate(int item) { 
    if (item < 0) throw new ArgumentOutOfRangeException(); 
}); 

SharpDevelop convertit en:

Expect.Call(Function() Do 
      list.Add(0) 
      End Function).IgnoreArguments().Do(DirectCast(Function(item As Integer) Do 
         If item < 0 Then 
          Throw New ArgumentOutOfRangeException() 
         End If 
         End Function, Action(Of Integer))) 

Mais cela ne fonctionne pas non plus (il ne compile pas).

Voici ce que je veux faire: créer un nouvel objet et appeler une méthode qui définit certaines propriétés de cette méthode. Dans la vie réelle, cette méthode remplira les propriétés avec les valeurs trouvées dans la base de données. En test, je voudrais me moquer de cette méthode avec une méthode/délégué personnalisée afin que je puisse définir les propriétés moi-même (sans aller à la base de données).

En pseudo-code, ce que je suis en train de faire:

Dim _lookup As LookUp = MockRepository.GenerateMock(Of LookUp)() 
_luvalue.Expect(Function(l As LookUp) l.GetLookUpByName("test")).Do(Function(l As LookUp) l.Property = "value") 

Répondre

3

Malheureusement vous essayez de le faire à la fois un sous lambda et une déclaration Lambda. Aucun n'est supporté dans VS2008 (mais sera dans la prochaine version de VS). Voici la version élargie qui va travailler pour VB

Je devine au type de m_list

Class MockHelper 
    Dim m_list as new List(Of Object) 

    Public Sub New() 
    Expect(AddressOf CallHelper).IgnoreArguments().Do(AddressOf Do Hepler) 
    End Sub 

    Private Sub CallHelper() 
    m_list.Add(0) 
    End Sub 

    Private Sub DoHelper(ByVal item as Integer) 
    if item < 0 Then 
     Throw New ArgumentOutOfRangeException 
    End If 
    End Sub 
End Class 
+0

@JaredPar Je me bats avec le même problème en ayant besoin de simuler (ou de boucher) un SUB VB.NET. Votre réponse semble résoudre le problème, mais je ne sais pas comment utiliser la classe MockHelper dans un test unti. Pouvez-vous fournir des détails supplémentaires? – Rick

1

Je n'ai jamais moqué quelque chose avec/à la fois un délégué et un lambda donc je ne peux pas donner un solution complète à ce problème, mais je voulais partager un exemple de code pour la fonction habituelle "AssertWasCalled" dans Rhino Mocks 3.5 pour les développeurs vb parce que j'ai passé du temps à essayer de grok ce ... (Gardez à l'esprit le ci-dessous est simple par souci de concision)

Ceci est la méthode à l'essai - pourrait être trouvé à l'intérieur d'une classe de service pour l'objet utilisateur

Public Sub DeleteUserByID(ByVal id As Integer) Implements Interfaces.IUserService.DeleteUserByID 
     mRepository.DeleteUserByID(id) 
End Sub 

C'est le test interactif pour affirmer la méthode référentiel est appelée

Ceci est la fonction d'enveloppe utilisée pour assurer que cela fonctionne avec/vb

Function Wrap_DeleteUserByID(ByVal Repository As IUserRepository) As Object 
    Repository.DeleteUserByID(Nothing) 

    Return Nothing 
    End Function 

J'ai trouvé que c'était une très mauvaise solution, mais si ça aide quelqu'un avec les mêmes problèmes, je l'ai eu valait le temps qu'il a fallu pour poster ceci;)

Questions connexes