Dart中如何测试两个Duration或DateTime是否近似相等
方案1:直接计算时间差校验
这是最简单的实现方式,直接计算两个时间的差值绝对值,判断是否在允许公差范围内即可:
test('times are approximately equal', () { final expected = DateTime.now(); final actual = DateTime.now(); expect(actual.difference(expected).abs(), lessThanOrEqualTo(Duration(seconds: 1))); });
方案2:自定义Matcher复用逻辑
如果项目中多处需要用到近似时间校验,可以自定义一个Matcher,写法更符合Dart测试的惯用风格,测试失败时的报错信息也更清晰:
首先定义通用校验方法:
/// 校验DateTime是否在[tolerance]公差范围内和[expected]相等 Matcher approxDateTime(DateTime expected, {Duration tolerance = const Duration(seconds: 1)}) { return predicate<DateTime>( (actual) => actual.difference(expected).abs() <= tolerance, 'should be within ${tolerance.inMilliseconds}ms of $expected', ); }
使用方式:
test('times are approximately equal', () { final expected = DateTime.now(); final actual = DateTime.now(); // 默认公差1秒 expect(actual, approxDateTime(expected)); // 也可以自定义公差,比如允许200毫秒偏差 // expect(actual, approxDateTime(expected, tolerance: Duration(milliseconds: 200))); });
内容的提问来源于stack exchange,提问作者Suragch
相关产品推荐
相关产品推荐

