2017-02-18 64 views
1

Я пытаюсь утверждать два элемента в своей коллекции, поскольку у меня есть две сущности в моей коллекции. Один из способов, которым я пытаюсь, - это просто сделать цикл foreach и утверждать их индивидуально, как показано ниже. Но в этом подходе мой второй элемент в этой коллекции будет иметь разные элементы. Я хочу сказать, что он передается для первого элемента в коллекции, но не для другого, так как мой второй элемент имеет разные значения, которые нужно сравнить с.Как утверждать каждый элемент коллекции с помощью Nunit

Как я могу сравнить свой второй предмет таким образом. Или, если у вас есть какая-то другая идея, пожалуйста, дайте мне знать.

foreach (var item in result.Entities) 
      { 
       Assert.AreEqual("Contractor1", item.ContractorName, "Result not found"); 
       Assert.AreEqual(1234, item.PKey, "Result not found"); 
       Assert.AreEqual("Alex", item.Name, "Result not found"); 
      } 

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

Итак, вот что я сделал ::

foreach (var item in result.Entities) 
      { 
       if (result.Entities.First() == item) 
       { 
        // Assert First Item 
       } 
       else{ 
        //Assert second list 
       } 

      } 

, но мне нужно лучшее решение.

ответ

1

Я предпочитаю делать в следующем виде:

  • создать список ожидаемых результатов expectedEntities
  • убедитесь, что ожидаемые результаты такое же количество, как фактические результаты result.Entities
  • убедитесь, что каждый элемент в result.Entities такое же как и ожидалось.

Что-то вроде этого:

Asert.AreEqual(expectedEntities.Count(), result.Entities.Count()); 

for (var i = 0: i < expectedEntities.Count(); i++) 
{ 
    Assert.AreEqual(expectedEntities[i].PKey, result.Entities[i].PKey, "Result not found"); 
    Assert.AreEqual(expectedEntities[i].Name, result.Entities[i].Name, "Result not found"); 
} 

выше примере можно убедиться, что результаты одинаковы и в том же порядке.

Если ЮО не заботятся о Орер вы можете для каждого ожидаемого элемента элемент запроса и проверки является его недействительным:

Asert.AreEqual(expectedEntities.Count(), result.Entities.Count()); 

for (var i = 0: i < expectedEntities.Count(); i++) 
{ 
    var item = result.Entities.Where(i => i.PKey == expectedEntities[i].PKey && i.Name == expectedEntities[i].Name).SingleOrDefault(); 
    Assert.IsNotNull(item); 
} 
0

Ваша задача о проверке объектов на равенство по значению.

Существует несколько встроенных методов в nunit для проверки, если коллекция объектов одинакова.

// Same order, same objects 
CollectionAssert.AreEqual(IEnumerable<T> expected, IEnumerable<T> actual) 

// Same objects, any order 
CollectionAssert.AreEquivalent(IEnumerable<T> expected, IEnumerable<T> actual) 

Но такие сравнения будут работать, только если ваши объекты T можно сравнить по значению.

Вы определяете, как объекты сравниваются путем переопределения методов Equals и GetHashcode. Это несколько базовая вещь, которую вы должны научиться чувствовать себя комфортно с .Net. И есть много вопросов о равенстве в .Net Проверьте это How to best implement Equals for custom types?