【问题标题】:Dart: testing private methods by accessing mock's propertyDart:通过访问 mock 的属性来测试私有方法
【发布时间】:2021-07-14 08:44:57
【问题描述】:

我正在尝试获取一个模拟对象属性。在初始化期间,“子”类正在获取对父级私有函数的引用。我想在测试期间获取此引用以检查父级的私有方法。

这是一个复杂得多的代码的简化示例:

class Monkey{

final name;
final Perk _perk;


Monkey('Maya', this._perk){
this._perk.jump = this._jump;
  }

void _jump(int a){ // here's the problem, not able to test private method
print('jump ${a}');
  }

}

我想要做的就是能够在 mockito 测试期间测试私有方法 _jump。我不想更改代码。 在测试期间我创建了

class MockPerk extends Mock implements Perk{}
Monkey(mockedPerk);

我想要实现的是:

  1. 使用 mockedPerk 创建 Monkey 实例
  2. MockedPerk 类中捕获属性_perk.jump
  3. 获取对Moneky's 类的私有_jump 方法的引用以便能够对其进行测试。

限制

  1. 公开方法不是一种选择。
  2. 不能使用@visibleForTesting 公开方法

【问题讨论】:

    标签: unit-testing dart testing mockito private-methods


    【解决方案1】:

    您可以使用verify(mock.setter = captureAny) 捕获传递给设置器的值。例如:

      var mockedPerk = MockPerk();
      var monkey = Monkey('Maya', mockedPerk);
      var jump = verify(mockedPerk.jump = captureAny).captured.single as void
          Function(int);
      jump(5); // Prints: jump 5
    

    【讨论】:

    • 这正是我想要实现的。非常感谢您的快速支持。我以前玩过参数捕获,但我不知道以这种方式使用它。
    • 如何捕获设置器值没有很好地记录。我必须查看package:mockito 的单元测试以查看如何执行此操作的示例。另外,如果这回答了您的问题,请不要忘记接受它。
    • 我还想问一下如何检测非模拟类内部是否调用了任何函数?有可能吗?
    • 一般来说,你不能。您需要让类使用回调而不是直接调用函数(“依赖反转/注入”)。
    猜你喜欢
    • 1970-01-01
    • 2020-08-31
    • 2013-03-13
    • 1970-01-01
    • 1970-01-01
    • 2019-05-28
    • 2014-11-21
    • 1970-01-01
    • 2014-06-05
    相关资源
    最近更新 更多