为什么 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 纠正我的哈希码。