簡體   English   中英

在Robolectric測試中注入嘲笑

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM