我正在编写一个单元测试,它将通过一些功能来处理所有集合项的迭代计时。在单元测试中,我将SomeFunctionality设置为睡眠时间为100ms的函数。
public void SomeFunctionality(CollectionItem item)
{
Thread.Sleep(100);
}
单元测试如下所示:
var stopwatch = new Stopwatch();
stopwatch.Start();
for(var item in collection)
{
SomeFunctionality(item);
}
stopwatch.Stop();
其中collection是一个包含3个对象的列表。接下来,我得到totalElapsedTimeSpan
,它表示迭代整个集合所花费的总时间(预期为~300ms)和averageTimeSpan
,表示每个项目花费的平均时间(预计为~100)
var totalElapsedTimeSpan = stopwatch.Elapsed;
var averageTicksPerItem = GetAverageTicksPerCollectionItem(_stopwatch.ElapsedTicks, collectionCount);
var averageTimeSpan = new TimeSpan(averageTicksPerItem);
其中averageTicksPerItem
的计算方法如下:
public long GetAverageTicksPerCollectionItem(long ticks, int count)
{
return Convert.ToInt64(Math.Round(((double)ticks / count), MidpointRounding.AwayFromZero));
}
当然,输出并不是我们所期望的那样:
totalElapsedTimeSpan.TotalMilliseconds: 302.4239
averageTimeSpan.TotalMilliseconds: 25.5367
为了确保,我确认GetAverageTicksPerCollection
函数调用并未导致意外更改。 GetAverageTicksPerCollectionItem
的输入和输出是:
ticks: 774720
count: 3
averageTicksPerItem: 258240
所以检查出来。将averageTimeSpan
传递给构造函数时,averageTicksPerItem
的值是否显着低于预期的~100ms?