我正在使用 Moq 对一些包含Parallel.foreach
循环的代码进行单元测试。
Arrange阶段设置了 4 个要在循环中抛出的异常,然后包装在AggregateException
.
这通过了我的 i7 处理器,我签入了代码。
之后,一位同事抱怨这对他来说并没有通过。结果Parallel.foreach
在轰炸之前只在他的 Core2duo 上产生了 2 个线程,因此只有 2 个异常被包裹在AggregateException
.
问题是如何处理这个单元测试不依赖于处理器架构?几个想法:-
- 有一篇关于手动添加异常的Microsoft 文章
AggregateException
,但我们并不热衷于这样做,因为如果出现问题,循环应该尽早退出。 ParallelOptions.MaxDegreeOfParallelism
可以对使用的线程数设置一个上限。但是除非这被拒绝为 1(这似乎更像是作弊而不是正确的单元测试)单元测试如何知道实际将使用多少线程并因此正确设置Arrange和Assert阶段?