【问题标题】:Mocking deep objects in Mockito在 Mockito 中模拟深层对象
【发布时间】:2018-05-01 22:18:27
【问题描述】:

我想实现以下目标:

Class A{
List<Class B> list;
}

Class B{
}

@Mock
A a;
when(a.list.isEmpty()).then(true); // this throws an error

通过使用这个:

@Mock(answer = Answers.RETURNS_DEEP_STUBS)
A a;

我必须使用吸气剂:

when(a.getList().isEmpty()).then(true);

但我不想更改我的代码以在任何地方使用 getter..

【问题讨论】:

  • 恐怕你真的别无选择(除非你在某个时候做a.list = mock(...);之类的事情)。
  • 如果您希望列表为空以进行测试,那么您不能只使用一个空列表而不模拟任何内容吗?说真的,使用吸气剂。否则你会遇到比这更多的问题。

标签: java android unit-testing mocking mockito


【解决方案1】:

您不能模拟对成员变量的直接访问。所以你有几个选择:

  1. 使用吸气剂。

  2. 将成员变量设置为模拟实例(a.list = mock(...) 或等效项)。

  3. 对于像列表这样的微不足道的类,使用模拟具有边际价值,因为您可以或多或少地直接设置所需的行为。所以在这种情况下,a.list = new ArrayList&lt;&gt;(); 就足够了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-11
    • 2015-03-20
    • 2013-03-07
    • 2017-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-11
    相关资源
    最近更新 更多