-1

私は xUnit と MOQ を使用しており、これをテストしようとしています:

public static class IEnumerableExtensions
{
    public static void ForEach<T>(this IEnumerable<T> list, Action<T> action)
    {
        foreach (var item in list)
            action(item);
    }
}

私はこれを試しましたが、契約はありません:

[Fact]
    public void ForEach()
    {
        var list = new List<string>() { "string1", "string2" };

        list.ForEach(x =>
        {
            x += "-passed";
        });

        foreach (var item in list)
            item.Should().EndWith("-passed");
    }

これをどのようにテストしますか?

4

2 に答える 2

1

x現在のテストでは、アクションでローカル変数のみを変更しています。新しいリストを作成します。

var list = new List<string>() { "string1", "string2" };
var dest = new List<string>();

list.ForEach(s => { dest.Add(x + "-passed"); });

foreach (var item in dest)
{
    item.Should().EndWith("-passed");
}

呼び出された頻度のカウントを維持することもできます。

int called = 0;
list.ForEach(s => {
    dest.Add(x + "-passed");
    called++;
});

Assert.AreEqual(called, list.Count);
于 2013-08-15T19:20:20.767 に答える