我正在使用robolelectric测试一个类。这是我的用例:
有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来模拟库类,因为它是final的。
我编写了代码来影子库类,但是影子方法的实现只有在我从A的测试类调用.getInstance().doSomething(x)时才会被调用,而不是在从A -> C -> LibraryClass
调用它时。我怎么能确保调用c.xyz(x)会导致我的影子类被调用??
我使用@Config(shadows = {ShadowLibClass.class})进行测试。我使用自定义测试运行器。基本的影子逻辑是有效的。
影子为嵌套调用工作,但不知道为什么不看着你。您是否覆盖了插装设置类定义并在createSetup方法中返回它,并将您的影子类添加为"应该插装"?
存在多个doSomething方法与不同的方法参数?