26

fluent-assertionsを使用して次のタイプのアイテムの束を返すメソッドをテストして、すべてのアイテムのIsActive-flag が に設定されていることを確認したいとしtrueます。

public class Item
{
    public bool IsActive { get; set; }
}

これを実現するには、コレクションを繰り返し処理し、foreach ループですべてのアイテムを個別にアサートします。

var items = CreateABunchOfActiveItems();
foreach (var item in items)
{
    item.IsActive.Should().BeTrue("because I said so!");
}

しかし、コレクション全体のすべてのアイテムを一度にアサートするより流暢な方法はありますか?

4

2 に答える 2

6

foreach ループを foreach メソッドに置き換えるなどの方法で (少なくとも少しは) うまくいくはずです。

var items = CreateABunchOfActiveItems();
items.ForEach(item => item.IsActive.Should().BeTrue("because I said so, too!"));

この構文は、従来の foreach ループよりも少し流暢です :)

CreateABunchOfActiveItemsメソッドがIEnumerable を返す場合、ForEach メソッドは定義されていません。ただし、拡張メソッドとして簡単に実装できます。

public static IEnumerable<T> ForEach<T>(this IEnumerable<T> enumeration, 
    Action<T> action)
{
    // I use ToList() to force a copy, otherwise your action 
    // coud affect your original collection of items!. If you are confortable 
    // with that, you can ommit it
    foreach (T item in enumeration.ToList())
    {
        action(item);
        yield return item;
    }
}
于 2013-09-19T16:39:17.270 に答える