我正在使用 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 的性质的问题,其中循环的迭代是并行完成的。
谁能看到我上面哪里出错了,或者我可以如何改变我的测试以防止它超时?