[英]Injecting non-mocks defined by a @Configuration class into a unit test
[英]Injecting mocks in a Robolectric test
我必須為具有私有字段(演示者)的特定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
返回一個真正的演示者而不是我注入的模擬。 這個真正的主持人最終稱我的真實模型和我的真實網絡服務顯然不是測試的理想選擇。
現在有人為什么我的模擬在這種情況下被忽略了?
寫完問題后,我意識到問題所在。 我的反射確實有效,主持人被初始化為模擬,但我忘記了在Activity.OnCreate()
期間,主持人被初始化為真正的主持人,從而覆蓋了我先前注入過的模擬。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.