注入模拟演示者对象的浓咖啡

iGo*_*oDa 7 model-view-controller android mocking mockito android-espresso

我试图更好地了解用于在android中测试的espresso框架,但是我在尝试模拟我的演示者时遇到了问题.

首先,我在我的应用程序中使用了一些改编的MVP架构,因此,我使用的是View(Activity) - > Presenter - > Model - > Presenter - > View,以发出请求并更新UI.

我的活动一旦创建就会发出请求以更新所有UI,一旦收到结果,就会相应地更新UI.

public class MyActivity extends AppCompatActivity implements IPresenter{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.my_activity);

        new Presenter().doRequestToUpdateUI();
    }

    @Override
    public void onResponseReceived(UIObject uiOject){
       findViewById(R.id.button).setVisibility(uiOject.getVisibility());
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,此doRequestToUpdateUI()需要一些以前的身份验证,因此需要模拟漏洞呈现器,以便测试我的活动上的其他UI.

有没有办法模拟我的演示者并将其注入活动,或者至少在调用方法doRequestToUpdateUI()时不执行任何操作.

我正在做这样的测试,但直到现在还没有工作.

@LargeTest
@RunWith(AndroidJUnit4.class)
public class MyActivityInstrumentationTest {

    @Mock
    public Presenter presenter;

    @InjectMocks
    public PresenterMock mPresenterMock;

    @Rule
    public ActivityTestRule<MyActivity> mActivityTestRule = new ActivityTestRule<MyActivity>(MyActivity.class, true, false) {
        @Override
        protected void beforeActivityLaunched() {
            presenter = Mockito.mock(Presenter.class);
            Mockito.doNothing().when(presenter).doRequestToUpdateUI();
            super.beforeActivityLaunched();
        }
    };

    @Test
    public void simpleTestCheck() {
        mActivityTestRule.launchActivity(new Intent());

       //here I should call the onResponseReceived() with a mock object however the presenter is not being injected
       widthId(R.id.button).matches(isDisplayed());
    }
 }
Run Code Online (Sandbox Code Playgroud)