2010-11-12 174 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方法中使用的引用类型,这将工作(值类型将只是工作开箱)。