2010-11-12 233 views
0

我們開始看到測試驅動開發的好處,並決定採取TDD推動我們設計的第一步。 (AKA只是測試)然後希望一旦我們看到測試的好處,以及嘲諷如何讓我們設計好,我們將離開它們並重新考慮..無論如何,yada yadaMoq'ing參考變量

我找到了很少有類似的話題,但我真的無法建立。下面我有這樣的:

<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 

有沒有辦法讓我用起訂量來改變在字典中的傳遞到不同的地方,讓這些測試通過?

+0

我不明白你的例子,因爲目前還不清楚'DMSinglton'類是幹什麼的,測試到底想要聲明什麼。請編輯。順便說一句:如果'DMSinglton'真的是一個單身人士(根據設計模式),一定不能打電話給'新'。 – 2010-11-13 06:07:17

回答

0

你可以在MOQ之外使用你的單元測試框架中的collection suppoprt來做到這一點。我可以想到至少有兩種方法可以使用MsTest或使用Linq方法來實現這一點。

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)); 

假定在詞典中重寫Equals方法中使用的引用類型,這將工作(值類型將只是工作開箱)。