2011-04-15 2 views
0

Я пишу модульные тесты для репозитория LINQ. У меня есть следующее испытание:Единичное тестирование вложенных списков

[TestMethod] 
public void Find_Method_MustReturn_Customer_Orders_ItemsWithinOrder() 
{ 
     Customer c = _rep.Find(6).SingleOrDefault(); 
     Assert.IsTrue(c.Orders.Count > 0);       
} 

Я вижу, сделал ли заказ заказ. Кроме того, я бы хотел использовать LINQ, чтобы проверить, есть ли у Заказов какие-либо элементы.

Как я могу это достичь?

Спасибо

+1

Указанные ниже варианты отличаются тем, что на самом деле проверено. Если каждый заказ должен иметь хотя бы один элемент, вы должны использовать решение, предоставленное Мэттом Элленом. Если для ордеров нормально иметь 0 элементов, если хотя бы один из ордеров имеет хотя бы один элемент, вы можете использовать решения, данные матье и мной. Тонкая разница. – Peter

ответ

2

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

[TestMethod] 
public void Find_Method_MustReturn_Customer_Orders_ItemsWithinOrder() 
{ 
    Customer c = _rep.Find(6).SingleOrDefault(); 
    Assert.IsTrue(c.Orders.Any());  
    Assert.IsTrue(c.Orders.Any(x => x.Items.Any());       
} 
+0

Метод проходит, даже если у клиента нет заказов ... –

+0

Он не должен, любой вернет false, если заказов нет – mathieu

+0

Замените IsNotNull на IsTrue. Извините и благодарю вас. –

2

Я думаю, что что-то, как это должно работать:

var items = 
    From o In c.Orders 
    From i In o.Items 
    Select i; 
Assert.IsTrue(items.Any()); 

Это эквивалент:

Assert.IsTrue(c.SelectMany(x => x.Items).Any()); 
0

Бы foreach хватает?

foreach(var order in c.Orders) 
{ 
    Assert.IsTrue(order.Items.Count > 0); 
} 
Смежные вопросы