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

时间:2016-10-19 14:27:08

标签: android model-view-controller mocking mockito android-espresso

我试图更好地了解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());
    }
 }

0 个答案:

没有答案