【问题标题】:How to set expectations on classes for doing unit tests involving nested calls?如何设置对涉及嵌套调用的单元测试的类的期望?
【发布时间】:2014-06-03 00:23:29
【问题描述】:

我正在使用 Robolectric 测试一个类。这是我的用例:

有 3 个类 A、B 和 C。我可以像这样从 C 调用一个库:

<Lib-class>.getInstance().doSomething(Object param);

C类定义为:

public class C {

  public void xyz(Object data) {
     <Lib-class>.getInstance().doSomething(data);
  }
}

我正在测试 A 类。A 类的测试有一个名为

的方法
@Test
public void testDo() {

  C c = new C();
  String x = "abc";
  c.xyz(x);

}

我想验证两件事:

  • 调用了库类的 doSomething() 方法
  • 使用我传递的相同参数调用了 doSomething() 方法(测试流程)

我不能使用 Mockito 来模拟库类,因为它是最终的。

我编写了隐藏库类的代码,但是只有当我从 A 的测试类调用 .getInstance().doSomething(x) 时才会调用 shadow 方法的实现,而不是从 A 调用它时 - > C -> 库类

如何确保调用 c.xyz(x) 会导致我的影子类被调用??

我使用@Config(shadows = {ShadowLibClass.class}) 进行测试。我也在使用自定义测试运行器。基本的影子逻辑有效。

【问题讨论】:

    标签: java android unit-testing robolectric android-testing


    【解决方案1】:

    嵌套调用的影子工作,但不知道为什么不适合你。您是否重写了检测设置类定义并在 createSetup 方法中返回它并将您的影子类添加为“应该检测”?

    是否存在具有不同方法参数的多个 doSomething 方法?也许只是错误的方法被遮蔽了。

    【讨论】:

      猜你喜欢
      • 2017-08-19
      • 2013-05-27
      • 1970-01-01
      • 1970-01-01
      • 2014-06-27
      • 2012-01-11
      • 2012-12-11
      • 2019-05-02
      • 1970-01-01
      相关资源
      最近更新 更多