【问题标题】:Flutter: testing颤振:测试
【发布时间】:2018-10-02 06:17:30
【问题描述】:

我正在尝试测试这个功能

  UserApi createUserApi(String url, String username, String password) {
    UserApi userApi = new UserApi(base: route(url), serializers: repo);
    userApi.base.basicAuth('$username', '$password');
    return userApi;
  }

基本上,测试是将这个函数的结果与它的“手动组合”进行比较,期望得到相同的结果。但它没有:

  String username = "asd";
  String password = "asd";
  UserApi userApiTest = new UserApi(base: route("asd"), serializers: repo);
  userApiTest.base.basicAuth('$username', '$password');
  test("UserApi creation", () {
    UserApi userApi = _presenter.createUserApi("asd", "asd", "asd");
    expect(userApi, userApiTest);
  }); 

结果总是:

Expected: <Instance of 'UserApi'>
  Actual: <Instance of 'UserApi'>

为什么它们不同?在调试中每个属性都是一样的。

【问题讨论】:

    标签: unit-testing testing dart flutter


    【解决方案1】:

    您有两个不同的 UserApi 实例。它们具有相同的属性值并不意味着它们相等。

    您需要实现hashCode 和operator==。 默认情况下,仅比较对同一对象实例的引用被认为是相等的(因为它们是相同的)

    另见

    【讨论】:

    • 抱歉,如果我问了一个愚蠢的问题,那么我应该重写我要测试的类中的 == 方法吗?
    • 如果您希望通过自定义类的实例为== 提供有意义的结果,那么是的,您需要覆盖operator == 和hashCode。
    • expect(userApi, userApiTest); 以expect(userApi, equals(userApiTest)); 执行,它使用== 来检查相等性。因此,除了缺少 operator == 和 get hashCode =&gt; ... 之外,您的测试很好
    • 是的,我刚试过。我还有其他一些问题,但现在可以了。非常感谢!
    • 新语言必须手动完成所有这些丑陋的代码来简单地比较 2 个对象,这真是令人难过。任何现代语言都允许比较对象。
    猜你喜欢
    • 1970-01-01
    • 2020-12-04
    • 2021-05-26
    • 2019-06-08
    • 2023-01-12
    • 1970-01-01
    • 1970-01-01
    • 2021-01-11
    • 2023-04-06
    相关资源
    最近更新 更多