如何比较相同类型的两个对象的值?

Posted

技术标签:

【中文标题】如何比较相同类型的两个对象的值?【英文标题】:How to compare values of two objects of the same type? 【发布时间】:2019-05-29 03:17:18 【问题描述】:

我需要为 Flutter 项目编写单元测试,如果有一个函数可以遍历相同类型的两个不同对象的所有属性以确保所有值相同,我会很高兴。

代码示例:

void main() 
  test('startLoadingQuizReducer sets isLoading true', () 
    var initState = QuizGameState(null, null, null, false);
    var expectedState = QuizGameState(null, null, null, true);

    var action = StartLoadingQuiz();
    var actualState = quizGameReducer(initState, action);
    // my test fails here 
    expect(actualState, expectedState);
  );

【问题讨论】:

【参考方案1】:

如何覆盖== 进行相等性测试

下面是一个覆盖== 运算符的示例,以便您可以比较两个相同类型的对象。

class Person 
  final String name;
  final int age;
  
  const Person(this.name, this.age);
  
  @override
  bool operator ==(Object other) =>
    identical(this, other) ||
    other is Person &&
    runtimeType == other.runtimeType &&
    name == other.name &&
    age == other.age;

  @override
  int get hashCode => name.hashCode ^ age.hashCode;

上面的例子来自this article,建议你使用Equitable包来简化流程。 This article也值得一读。

【讨论】:

【参考方案2】:

您需要覆盖 QuizGameState 类中的 equality operator。

【讨论】:

如果你这样做,不要忘记覆盖 hashCode。否则,Set 和其他人会崩溃。

以上是关于如何比较相同类型的两个对象的值?的主要内容,如果未能解决你的问题,请参考以下文章

c# 比较两个对象的值是不是相等

js中相等与不等

KeyValuePairs 如何比较相等?

两个空对象(空数组)为什么不相等

==与===

在比较 Java 中的两个原语与两个对象时,== 实际上是相同还是不同?