我需要为一个具有私有字段(即 presenter)的特定 Activity
构建 Robolectric 测试。为了将 mock 对象注入该字段,我使用了反射,因为我所在的项目没有依赖注入框架。
我的测试设置如下:
MyActivityTest.java
public class ConsumoViewTest {
@Mock
MvpConsumo.Presenter mockPresenter;
private MyActivity view;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
ActivityController<MyActivity> activityController =
Robolectric.buildActivity(MyActivity.class);
view = activityController.get();
try {
FieldUtils.writeField(view, "presenter", mockPresenter, true);
} catch (IllegalAccessException e){
//Exception handling
}
activityController.setup();
}
作为我的
Activity
设置的一部分,它创建并添加了一个Fragment
,在OnAttach()
期间,Fragment
调用了presenter的getter。现在,我无法理解的是,Activity
返回一个真正的presenter,而不是我注入的mock presenter。这个真正的presenter最终调用了我的真实模型和真实webservice,这显然并不理想用于测试。有人知道为什么在这种情况下忽略了我的mock吗?
setPresenter
方法也不会更好。 - Nicolás Carrasco-Stevensonwhen
之前停止进程以注入依赖项。 - Eugen MartynovonCreate()
或任何其他正在测试的类的方法。因此,如果您需要精确控制注入内容的位置,则您的方法将无法正常工作。 - Eugen Martynov