gpt4 book ai didi

dart - 如何在 Dart 单元测试中通过其状态(所有属性值)断言对象?

转载 作者:行者123 更新时间:2023-12-05 02:47:52 25 4
gpt4 key购买 nike

我有一个类(当然比例子有更多的属性)。

如何编写下面的简单测试?我知道 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));
} );
}

最佳答案

您需要为 UnderTesting 覆盖 == 运算符(因此也应该覆盖 hashCode)。 equals 的文档告诉我们如何进行相等性测试:

If [expected] is a [Matcher], then it matches using that. Otherwise it tests for equality using == on the expected value.

所以你的代码应该是这样的:

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 包来制作简单的 hashCode 实现:https://pub.dev/documentation/quiver/latest/quiver.core/quiver.core-library.html

关于dart - 如何在 Dart 单元测试中通过其状态(所有属性值)断言对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64799506/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com