我试图更好地了解espresso框架以便在Android中进行测试,但是我在试图模仿我的演示者时遇到了问题。
首先,我在我的应用程序中使用了一些改编的MVP架构,因此,我使用的是View(Activity) - >演示者 - >型号 - >演示者 - >查看,发出请求并更新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());
}
}
但是,这个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());
}
}