我必须为具有私有字段(演示者)的特定Activity
构建Robolectric测试。为了将模拟注入到该字段中,我使用了反射,因为我正在处理的项目没有依赖注入框架。
我的测试设置如下:
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
期间为演示者调用getter。现在,我无法理解的是Activity
返回一个真正的演示者而不是我注入的模拟。这个真正的主持人最终称我的真实模型和我的真实网络服务显然不适合测试。
现在有人为什么我的模拟在这种情况下被忽略了?
答案 0 :(得分:2)
写完问题后,我意识到问题所在。我的反思确实有效,主持人被初始化为模拟,但我忘了在<?xml version="1.0"?>
<List>
<type>MAILBOX</type>
<DOCS>
<DocId>39fece005f28qrn8000003r5</DocId>
<DocNo>123</DocNo>
</DOCS>
<DOCS>
<DocId>39fece005f28qrn8000003r6</DocId>
<DocNo>456</DocNo>
</DOCS>
</List>
期间,主持人被初始化为真正的主持人,从而覆盖了我先前注入过的模拟。