unit test fails with Failed assertion: line 17: '<optimized out>': is not true
196
I can't see anything obvious suggesting which property is causing the test to fail.
A couple of suggestions:
- Try removing one property at a time from the comparisons in the == implementation.
- Try using the Equatable package for your model class. This reduces the boilerplate a lot and is less error-prone than implementing
==
andhashCode
by hand.
Author by
MaxS
Updated on December 26, 2022Comments
-
MaxS over 1 year
I'm stuck with a unit test and fairly new to testing. I tried to create a test for a class with toMap/fromMap methods and write tests for it.
Within the class I have the following code, where I added the hashCode and == operator methods to prepare the class for the test.
I have the exact same setup for other classes, where the test works..
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; } }
And this is the test that fails:
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: [], )); });
**UPDATED ERROR MESSAGE after hashList has been added **
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>```
And that is the error message - this one changed now to the one above, after adding the hashList method to the list properties.
.../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>´´´
-
MaxS over 3 yearsI actually think I came one step closer when changing the hashValues method to: ``` @override int get hashCode => hashValues( uid, email, userName, diagnose, surgery, hashList(goals), hashList(kos));```
-
-
MaxS over 3 yearsMany thanks! The equatable package solved the problem, indeed!