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