【问题标题】:Why expect(Future.value(true), Future.value(true)) has fail result in flutter test?为什么 expect(Future.value(true), Future.value(true)) 在颤振测试中失败了?
【发布时间】:2022-01-04 07:43:27
【问题描述】:

所以我对这个匹配器感到有些困惑。

为什么这个测试返回失败?

expect(Future.value(true),Future.value(true));

我认为它是相同的值,并且匹配器应该为该测试返回成功。

【问题讨论】:

    标签: flutter dart flutter-test


    【解决方案1】:

    它们是不同的对象,使用 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 纠正我的哈希码。

    【讨论】:

    • 啊啊我明白了,所以当我们没有等待 Future 值时,颤振将通过 hashCode 进行比较。非常感谢!
    • 你知道如何比较两个相同的班级吗?我只是尝试 expect(ClassA(), ClassA()) 仍然返回失败测试。如何让expect(ClassA(), ClassA()) 通过?
    • 没关系,我可以使用expect(c is ClassA, true) 来比较类名。
    • @AfandiYusuf 我编辑了我的答案以包含您的其他问题
    • @AfandiYusuf 对象由operator == 比较,而不是hashCode。但是,默认的 operator == 实现会比较对象 identity
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-13
    • 1970-01-01
    • 1970-01-01
    • 2013-02-02
    • 2021-07-10
    • 1970-01-01
    相关资源
    最近更新 更多