【发布时间】: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