为什么 expect(Future.value(true), Future.value(true)) 在 flutter 测试中失败?
Why expect(Future.value(true), Future.value(true)) has fail result in flutter test?
所以我对这个匹配器感到有点困惑。
为什么这个测试返回失败?
expect(Future.value(true),Future.value(true));
我认为这是相同的值,匹配器应该为该测试返回成功。
它们是不同的对象,使用 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
编辑:
回答你的其他问题:
Do you know how to compare 2 same classes? I just try expect(ClassA(), ClassA()) still returning fail test. How to make expect(ClassA(), ClassA()) to pass?
您使用 expect
的方式有点不对。如果您想知道 class 是否是特定类型,您可以这样做:
test('test', () async {
final ClassA classAInstance = ClassA();
expect(classAInstance, isA<ClassA>());
expect(classAInstance == classAInstance, true);
});
感谢 jamesdlin 纠正我的哈希码。
所以我对这个匹配器感到有点困惑。
为什么这个测试返回失败?
expect(Future.value(true),Future.value(true));
我认为这是相同的值,匹配器应该为该测试返回成功。
它们是不同的对象,使用 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
编辑: 回答你的其他问题:
Do you know how to compare 2 same classes? I just try expect(ClassA(), ClassA()) still returning fail test. How to make expect(ClassA(), ClassA()) to pass?
您使用 expect
的方式有点不对。如果您想知道 class 是否是特定类型,您可以这样做:
test('test', () async {
final ClassA classAInstance = ClassA();
expect(classAInstance, isA<ClassA>());
expect(classAInstance == classAInstance, true);
});
感谢 jamesdlin 纠正我的哈希码。