none
unit Testing. Ошибка RRS feed

  • Вопрос

  •   class TestProblemClass
      {
        private List<int> high = new List<int>(5);
    
        public TestProblemClass()
        {
          high = new List<int> { 2, 4, 6, 8, 10 };
        }
        
        public List<int> High()
        {
          return high;
        }
      }
    

    Есть класс. Создаю тест.

        [TestMethod()]
        public void HightHTest()
        {
          TestProblemClass target = new TestProblemClass(); // TODO: Initialize to an appropriate value
          List<int> expected = new List<int> { 2, 4, 6, 8, 10 }; ; // TODO: Initialize to an appropriate value
          List<int> actual;
          actual = target.High();
          Assert.AreEqual(expected, actual);
          //Assert.Inconclusive("Verify the correctness of this test method.");
        }
    
    Тест не проходит. Ошибка Assert.AreEqual failed. Expected:<System.Collections.Generic.List`1[System.Int32]>. Actual:<System.Collections.Generic.List`1[System.Int32]>.
    • Перемещено Tagore Bandlamudi 1 октября 2010 г. 21:40 MSDN Forums consolidation (От:Visual C#)
    23 июля 2010 г. 17:41

Ответы

  • Так и должно быть. List - ссылочный тип. Реализация метода Object.Equals() по умолчанию для ссылочных типов сравнивает значения ссылок на эти объекты, которые указывают на разные области памяти. Чтобы сравнить значения в списке нужно организовать цикл и проверить

    Assert.AreEqual(expected[i], actual[i]) 

    • Помечено в качестве ответа Гриффон 23 июля 2010 г. 20:57
    23 июля 2010 г. 19:53

Все ответы

  • Так и должно быть. List - ссылочный тип. Реализация метода Object.Equals() по умолчанию для ссылочных типов сравнивает значения ссылок на эти объекты, которые указывают на разные области памяти. Чтобы сравнить значения в списке нужно организовать цикл и проверить

    Assert.AreEqual(expected[i], actual[i]) 

    • Помечено в качестве ответа Гриффон 23 июля 2010 г. 20:57
    23 июля 2010 г. 19:53
  • Так и должно быть. List - ссылочный тип. Реализация метода Object.Equals() по умолчанию для ссылочных типов сравнивает значения ссылок на эти объекты, которые указывают на разные области памяти. Чтобы сравнить значения в списке нужно организовать цикл и проверить

    Assert.AreEqual(expected[i], actual[i]) 


    Спасибо. Я понимал, что так и должно быть... но, вот что не так не понимал. Теперь всё ясно. Написал так

        [TestMethod()]
        public void HightHTest()
        {
          TestProblemClass target = new TestProblemClass(); // TODO: Initialize to an appropriate value
          List<int> expected = new List<int> { 2, 4, 6, 8, 10 }; ; // TODO: Initialize to an appropriate value
          List<int> actual;
          actual = target.High();
          for (int i = 0; i < expected.Count; i++)
          {
            Assert.AreEqual(expected[i], actual[i]);
          }
          //Assert.Inconclusive("Verify the correctness of this test method.");
        }
    
    и всё замечательно работает. Еще раз спасибо, только разбираюсь с тестами и был затык именно с любыми ссылочными типами.
    23 июля 2010 г. 21:01