【发布时间】:2022-01-04 07:43:27
【问题描述】:
所以我对这个匹配器感到有些困惑。
为什么这个测试返回失败?
expect(Future.value(true),Future.value(true));
我认为它是相同的值,并且匹配器应该为该测试返回成功。
【问题讨论】:
标签: flutter dart flutter-test
所以我对这个匹配器感到有些困惑。
为什么这个测试返回失败?
expect(Future.value(true),Future.value(true));
我认为它是相同的值,并且匹配器应该为该测试返回成功。
【问题讨论】:
标签: flutter dart flutter-test
它们是不同的对象,使用 hashcode operator == 进行比较,而不是通过 hashCode。但是,默认运算符 == 实现会比较对象身份。这会有所不同,因为它们不是同一个对象。
如果您await 期货,则会比较这些值并通过。
test('test', () async {
print(Future.value(true).hashCode);
print(Future.value(true).hashCode);
expect(await Future.value(true), await Future.value(true));
});
https://api.flutter.dev/flutter/dart-core/Object/operator_equals.html
编辑: 回答您的其他问题:
你知道如何比较两个相同的班级吗?我只是尝试 expect(ClassA(), ClassA()) 仍然返回失败测试。如何让expect(ClassA(), ClassA()) 通过?
您以错误的方式使用expect。如果你想知道这个类是否是一个特定的种类,你可以这样做:
test('test', () async {
final ClassA classAInstance = ClassA();
expect(classAInstance, isA<ClassA>());
expect(classAInstance == classAInstance, true);
});
感谢 jamesdlin 纠正我的哈希码。
【讨论】:
expect(c is ClassA, true) 来比较类名。
operator == 比较,而不是hashCode。但是,默认的 operator == 实现会比较对象 identity。