Переменные ссылки Moq'ing - PullRequest
0 голосов
/ 13 ноября 2010

Мы начинаем видеть преимущества Test Driven Development и решили сделать первые шаги в том, чтобы позволить TDD управлять нашим дизайном.(АКА только тестирует) Тогда, надеюсь, как только мы увидим преимущества тестирования и то, как плохая насмешка позволяет нам хорошо проектировать, мы отойдем от них и перефакторим.нашел несколько тем, которые были похожи, но ничего, что я мог бы действительно развить.У меня есть что-то вроде ниже:

<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

Есть ли способ позволить мне использовать Moq, чтобы изменить переданный в словаре на другой, позволяя эти тесты пройти?

1 Ответ

0 голосов
/ 15 ноября 2010

Вы можете сделать это вне MOQ, используя collection suppoprt из вашей среды модульного тестирования. Я могу придумать как минимум два способа добиться этого, используя MsTest или SequenseEquals метод 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, это будет работать (типы значений будут работать из коробки).

...