dart - 如何在 Dart 单元测试中通过对象的状态(所有属性值)断言对象?
问题描述
我有一个类(当然,比示例具有更多的属性)。
如何编写下面的简单测试?我知道 Dart 中的平等是通过对象实例来实现的。如何比较完整的对象状态?我也用same
匹配器测试过,没有运气。
import 'package:test/test.dart';
class UnderTesting {
var a;
var b;
UnderTesting({this.a, this.b});
}
void main() {
test("compare objects", () {
final obj1 = UnderTesting(a:1, b:2);
final obj2 = UnderTesting(a:1, b:2);
// Next will fail because it is checking if it is the same instance
expect(obj1, equals(obj2));
} );
}
解决方案
==
您需要hashCode
为UnderTesting
. 的文档equals
告诉我们如何测试相等性:
如果 [expected] 是 [Matcher],则使用它进行匹配。否则,它会使用
==
期望值来测试相等性。
所以你的代码应该是这样的:
import 'package:test/test.dart';
import 'package:quiver/core.dart';
class UnderTesting {
int a;
int b;
UnderTesting({this.a, this.b});
@override
bool operator ==(Object other) =>
(other is UnderTesting) ? (a == other.a && b == other.b) : false;
@override
int get hashCode => hash2(a, b);
}
void main() {
test("compare objects", () {
final obj1 = UnderTesting(a: 1, b: 2);
final obj2 = UnderTesting(a: 1, b: 2);
expect(obj1, equals(obj2)); // All tests passed!
});
}
我可以推荐用于轻松实现的quiver
软件包: https ://pub.dev/documentation/quiver/latest/quiver.core/quiver.core-library.htmlhashCode
推荐阅读
- c++ - 为什么编译器不能推断返回类型?
- python - 从插入 SQLLite3 中获取操作错误
- bash - 为什么在将其设置为变量后只运行一次而不是两次?重击
- java - 如何在 Java 中为 google cloud delpoyment manager deployments.insert() api 设置预览标志
- c# - 如何创建具有调用生命周期范围的 AWS Lambda 依赖注入服务?
- javascript - Vuejs如何在#app之前在HTML中声明一个组件
- arduino - ESP32 + 深度睡眠 + I2C - 中断问题
- node.js - 如何检测计算机是否锁定在 Node.js 中?
- javascript - 在 AG Grid 列标题中呈现 HTML (Community v20.0.0 +)
- c++ - 将字符串中的整数值相加