android - 使用 Espresso 和模拟数据源进行测试失败

标签 android android-espresso android-testing

我的应用程序中有一个按钮,当用户单击我时,它会显示一个文本。现在我想用 Espresso 测试它。

MainActivity 中的代码是:

public void onButtonGetDataClick(View view) {
    mainPresenter.onButtonClick();
}

@Override
public void showData(String data) {
    textView.setText(data);
}

对于 mainPresenter.onButtonClick() :

    @Override
public void onButtonClick() {
    if (dataSource != null) {
        mainView.showData(dataSource.getReleaseString());
    }
}

其中 dataSource 被注入(inject)到 MainPresenter

问题是我如何测试这样的东西?我尝试模拟 dataSource 并像这样测试它:

    @Test
public void onButtonGetDataClicked_textViewDisplaysData() {
    when(dataSource.getReleaseString()).thenReturn(MOCK_STRING);

    activityRule.launchActivity(new Intent());

    /** Click Button*/
    onView(withId(R.id.btn_get_data))
            .perform(click());

    onView(withId(R.id.tv_text_data))
            .check(matches(withText(MOCK_STRING)));

}

但这总是给我“RELEASE_STRING”而不是“MOCK_STRING”因此测试总是失败

编辑:注入(inject)代码:

    @Before
public void setUp() {

    mockMainView = mock(MainMVP.View.class);
    mainPresenter = new MainPresenter(mockMainView);

    Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation();
    MockMyApplication applicationContext
            = (MockMyApplication) instrumentation.getTargetContext().getApplicationContext();
    MockDataComponent component = (MockDataComponent) applicationContext.component();
    component.inject(mainPresenter);

}

当然我用

@Inject
DataSource dataSource;

模拟数据组件:

@Singleton
@Component(modules = {MockDataModule.class})
public interface MockDataComponent extends DemoComponent {

void inject(MainPresenter mainPresenter);

}

和模拟数据模块:

@Module
public class MockDataModule {

@Provides
public DataSource providesDataSource() {
    return mock(DataSource.class);
}

}

最佳答案

您没有在此处为您的 Activity 设置演示者,因此无法访问模拟数据源。

通过制作 Presenter 组件,您可以为您的 Activity 注入(inject) Presenter,然后这个单例 Presenter 可以拥有模拟数据源来呈现。

关于android - 使用 Espresso 和模拟数据源进行测试失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39828667/

相关文章:

android - 我们如何使用 Android 在平板电脑中滚动 ListView

java - 围绕它的中心旋转 imageview

android - 未找到任何 Activity 。您是否忘记通过调用 getActivity() 或 startActivitySync 或类似方法启动 Activity

Android Espresso 等待文本出现

Android 单元测试 Robolectric :3. 3.2 - 没有这样的 list 文件 : build\intermediates\manifests\full\debug\src\main\AndroidManifest. xml

android - 如何使用 Espresso 检查 BottomNavigationItemView?

android - PDFBOX 在 Android 中的使用

android - 如何在 ImageView 中缩放特定 XY 坐标(点)

android - Espresso : how to scroll to the bottom of ScrollView

android - 使用 Robolectric 2 测试可序列化的包裹