2010-11-12 5 views
0

Nous commençons à voir les avantages du développement piloté par les tests et avons décidé de faire les premiers pas en permettant à TDD de piloter notre conception. (AKA vient de tester) Ensuite, nous espérons une fois que nous voyons les avantages des tests et comment moqueurs pauvres à nous permettre de bien concevoir, nous nous éloignerons d'eux et re-factoriser .. yada yada, de toute façonMoq'ing Variables de référence

J'ai trouvé un quelques sujets qui ont été similaires mais rien sur quoi je peux vraiment construire. J'ai quelque chose comme ci-dessous:

<Test()> 
    Public Sub TestMockWithReferenceVariable() 
    Dim expected As New Dictionary(Of String, Object) 
    expected.Add("test", 1) 
    Dim pass As New Dictionary(Of String, Object) 


    Dim mock = New Moq.Mock(Of ITestDM)() 
    mock.Setup(Function(m) m.Load(Of String)("test", pass)).Returns("Test") 

    Dim sing As New DMSinglton(mock.Object) 
    Dim result As String = sing.Load(Of String)("test", pass) 

    Assert.AreEqual("Test", result) 
    Assert.AreEqual(expected, pass) 
    End Sub 



Public Interface ITestDM 
    Function Load(Of T)(ByVal sp As String, ByVal params As Dictionary(Of String, Object)) As T 
End Interface 

Est-il possible de me laisser utiliser Moq pour changer le passé dans le dictionnaire à un autre, permettant à ces tests à passer?

+0

Je ne comprends pas votre exemple, car ce n'est pas clair ce que fait la classe 'DMSinglton' et ce que le test veut exactement affirmer à la fin. S'il vous plaît modifier. Btw .: Si 'DMSinglton' est vraiment destiné à être un singleton (selon le modèle de design), il ne doit pas y avoir d'appel à 'new'. –

Répondre

0

Vous pouvez le faire en dehors de MOQ en utilisant le support de collecte de votre cadre de test unitaire. Je peux penser à au moins deux manières d'y parvenir en utilisant MsTest ou en utilisant la méthode Linq SequenseEquals.

Dictionary<string, string> dict = new Dictionary<string, string> { { "test", "test" } }; 
Dictionary<string, string> dict2 = new Dictionary<string, string> { { "test", "test" } }; 
//MsTest CollectionAssert tests if two collections contain the same elements 
CollectionAssert.AreEquivalent(dict, dict2); 
//Another way to do the same thing - using SequenceEquals 
Assert.IsTrue(dict.SequenceEqual(dict2)); 

En supposant que les types de référence utilisés dans la méthode override Equals dictionnaire, cela fonctionnera (types de valeur juste travailler hors de la boîte).

Questions connexes