':不正确,unit-testing,flutter,dart,testing"/>

首页 > 解决方案 > 单元测试失败,断言失败:第 17 行:'':不正确

问题描述

我坚持进行单元测试并且对测试相当陌生。我尝试使用 toMap/fromMap 方法为类创建测试并为其编写测试。

在类中,我有以下代码,其中我添加了 hashCode 和 == 运算符方法来为测试准备类。

对于测试有效的其他类,我有完全相同的设置..

  String uid;
  String email;
  String userName;
  String diagnose;
  bool surgery;
  List<Goal> goals;
  List<KOS> kos;

  UserCase({
    this.uid,
    this.email,
    this.userName,
    this.diagnose,
    this.surgery = false,
    this.goals,
    this.kos,
  });

  factory UserCase.fromData(Map<String, dynamic> data) {
    if (data == null) {
      print('UserCase fromData NULL');
      return null;
    }
    final String uid = data['uid'] ?? '';
    final String email = data['email'] ?? '';
    final String userName = data['userName'] ?? '';
    final String diagnose = data['diagnose'] ?? '';
    final bool surgery = data['surgery'] ?? false;
    final List<Goal> goals = data['goals'] == null
        ? []
        : List.from(data['goals'].map((e) => Goal.fromData(e)));
    final List<KOS> kos = data['kos'] == null
        ? []
        : List.from(data['kos'].map((e) => KOS.fromData(e)));

    return UserCase(
      uid: uid,
      email: email,
      userName: userName,
      diagnose: diagnose,
      surgery: surgery,
      goals: goals,
      kos: kos,
    );
  }

  Map<String, dynamic> toMap() {
    return {
      'uid': uid,
      'email': email,
      'userName': userName,
      'diagnose': diagnose,
      'surgery': surgery,
      'goals': goals == null || goals.isEmpty
          ? []
          : goals.map((e) => e.toMap()).toList(),
      'kos':
          kos == null || kos.isEmpty ? [] : kos.map((e) => e.toMap()).toList(),
    };
  }

**UPDATE: adding hashList to ListObjects**

@override
int get hashCode => hashValues(
      uid, email, userName, diagnose, surgery, hashList(goals), hashList(kos));

old:
  *@override
  int get hashCode {
    return hashValues(uid, email, userName, diagnose, surgery, goals, kos);
  }*

  @override
  bool operator ==(other) {
    if (identical(this, other)) return true;
    if (runtimeType != other.runtimeType) return false;
    final UserCase otherCase = other;
    return uid == otherCase.uid &&
        email == otherCase.email &&
        userName == otherCase.userName &&
        diagnose == otherCase.diagnose &&
        surgery == otherCase.surgery &&
        goals == otherCase.goals &&
        kos == otherCase.kos;
  }
}

这是失败的测试:

      final userCase = UserCase.fromData({
        'uid': 'id123',
        'email': 'email123',
        'userName': 'username',
        'diagnose': 'ACL',
        'surgery': true,
        'goals': [],
        'kos': [],
      });
      expect(
          userCase,
          UserCase(
            uid: 'id123',
            email: 'email123',
            userName: 'username',
            diagnose: 'ACL',
            surgery: true,
            goals: [],
            kos: [],
          ));
    });

**添加 hashList 后更新的错误消息**

test/usercase_test.dart: fromData case with all properties [E]                                                               
  Expected: UserCase:<uid: id123, email: email123, userName: username, diagnose: ACL, surgery: true, goals: [], kos: []>
    Actual: UserCase:<uid: id123, email: email123, userName: username, diagnose: ACL, surgery: true, goals: [], kos: []>
  
  package:test_api                                   expect
  package:flutter_test/src/widget_tester.dart 431:3  expect
  usercase_test.dart 21:7                            main.<fn>.<fn>```

这就是错误消息 - 在将 hashList 方法添加到列表属性之后,这个现在更改为上面的那个。

.../test/usercase_test.dart: fromData case with all properties [E]                          
  'dart:ui/hash_codes.dart': Failed assertion: line 17: '<optimized out>': is not true.
  dart:ui                                            hashValues
  ../lib/Classes/UserCase.dart 71:12                 UserCase.hashCode
  dart:collection                                    _CompactLinkedHashSet.contains
  package:matcher/src/pretty_print.dart 28:14        prettyPrint._prettyPrint
  package:matcher/src/pretty_print.dart 119:22       prettyPrint
  package:matcher/src/description.dart 49:11         StringDescription.addDescriptionOf
  package:matcher/src/equals_matcher.dart 267:19     _DeepMatcher.describe
  package:matcher/src/description.dart 47:13         StringDescription.addDescriptionOf
  package:test_api                                   expect
  package:flutter_test/src/widget_tester.dart 431:3  expect
  usercase_test.dart 22:7                            main.<fn>.<fn>´´´

标签: unit-testingflutterdarttesting

解决方案


我看不到任何明显的迹象表明哪个属性导致测试失败。

几个建议:

  • 尝试从 == 实现中的比较中一次删除一个属性。
  • 尝试为您的模型类使用Equatable 包==这大大减少了样板文件,并且比hashCode手动实施更不容易出错。

推荐阅读