-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 回答
1
List<int> items = new List<int>();
Action<int> act = i => { items.Add(i); };

Enumerable.Range(0, 10).ForEach(act).ToList();

Assert.That(items.Count, Is.EqualTo(10));
...
于 2013-08-15T19:20:45.977 回答