测试异步方法不会给出一致的结果

时间:2015-12-03 14:26:34

标签: c# unit-testing asynchronous

我试图弄清楚我的单元测试在与解决方案中的其他单元测试一起运行时会失败但在单独运行时通过的原因。谁能告诉我我错过了什么?

SUT是一个名为CompositeClient的类,它本质上是围绕另外两个客户端的包装类。它的主要思想是优先考虑其中一个客户。

Dictionary<int, List<Vehicle>>

使用解决方案中的所有其他单元测试运行下面的单元测试会导致结果失败。但如果我单独进行这项测试,它就会通过。

public class CompositeClient : IReceiverChannel
{
    private static readonly List<IReceiverChannel> ReceiverChannels = new List<IReceiverChannel>();

    public CompositeClient(IReceiverChannel priority, IReceiverChannel normal)
    {
        ReceiverChannels.Add(priority);
        ReceiverChannels.Add(normal);
    }

    public async Task<IEnumerable<Request>> ReceiveBatchAsync(int batchSize)
    {
        var req = new List<Request>();

        foreach (var channel in ReceiverChannels)
        {
            req.AddRange(await channel.ReceiveBatchAsync(batchSize - req.Count).ConfigureAwait(false));

            if (req.Count >= batchSize)
            {
                break;
            }
        }

        return req;
    }
}

使用的工具:

  • Visual Studio 2013
  • .NET Framework 4.5.2
  • Resharper 9.2
  • FluentAssertion

1 个答案:

答案 0 :(得分:1)

正如David指出的那样,我忽略了我在CompositeClient类中声明的静态字段。删除static关键字解决了这个问题。