2

我正在使用 Visual Studio 测试工具和 Rhino 模拟。

我目前正在对使用 Parallel.ForEach 处理数据的方法编写单元测试。这是我要测试的方法:

var exceptions = new ConcurrentQueue<Exception>();

Parallel.ForEach(messages, emailMessage =>
{
    try
    {
        this.Insert(emailMessage)
    }
    catch (Exception exception)
    {
        exceptions.Enqueue(exception);
    }
});

if (exceptions.Count > 0)
{
    throw new AggregateException(exceptions);
}

这是我的测试:

[ExpectedException(typeof(AggregateException))]
public void MyTest()
{
    this.target = new MyClassToTest();

    // stub the throwing of an exception
    this.target.Stub(
        s => s.Insert(null)).IgnoreArguments().Throw(new ArgumentNullException());

    // perform the test
    this.target.Send();
}

在我的测试中,我存根插入方法并强制它抛出异常。我的测试期望是抛出 AggregateException。如果我在 Visual Studio 中运行测试,它运行良好,但在持续集成服务器上,测试会超时。我希望这是一个围绕 Parallel.ForEach 的性质的问题,其中循环的迭代是并行完成的。

谁能看到我上面哪里出错了,或者我可以如何改变我的测试以防止它超时?

4

0 回答 0