当前位置:  开发笔记 > Android > 正文

使用浓缩咖啡从测试中调用测试活动的方法并查看其结果

如何解决《使用浓缩咖啡从测试中调用测试活动的方法并查看其结果》经验,为你挑选了1个好方法。

我正在创建Android应用程序.我正在使用Espresso进行测试.

我有一个方法的活动:

public void render(Recipe recipe){
    //draw the recipe to the activity
}

我想测试这个方法是否正常工作.

不工作的解决方案1

我测试了以下内容

@Test
public void viewPaintsRecipes() {
    final Activity activity = activityRule.launchActivity(new Intent());
    ((MainActivity)activity).render(Arrays.asList(new Recipe[]{recipe}));
    onView(withId(R.id.text)).check(matches(withText(recipe.toString())));
}

我得到一个例外.

只有创建视图层次结构的原始线程才能触及其视图.

不工作的解决方案2

我还尝试将两行放在主线程中由Handler运行的runnable中,但测试挂起.

我该怎么做到这一点?

笔记

我附上了完整的测试.请注意,我也使用匕首和Mockito.

@RunWith(AndroidJUnit4.class)
@LargeTest
public class MainActivityTestWithMockPresenter {
    Recipe recipe = new Recipe("sampleTitle");
    @Rule
    public ActivityTestRule activityRule = new ActivityTestRule(MainActivity.class, true, false);

    @Mock
    MainActivityPresenter mockPresenter;
    @Mock
    AndroidApplication mockContext;

    @Before
    public void insertMockedComponent(){
        MockitoAnnotations.initMocks(this);
        Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation();
        AndroidApplication app = (AndroidApplication) instrumentation.getTargetContext().getApplicationContext();
        MyModule mockedMyModule = new MyModule(mockContext){
            @Provides
            public MainActivityPresenter getMainActivityPresenter(){
                return mockPresenter;
            }
        };
        MyComponent component = DaggerMyComponent.builder().myModule(mockedMyModule).build();
        app.setComponent(component);
    }

    @Test
    public void viewPaintsRecipes() {
        final Activity activity = activityRule.launchActivity(new Intent());
        ((MainActivity)activity).render(Arrays.asList(new Recipe[]{recipe}));
        onView(withId(R.id.text)).check(matches(withText(recipe.toString())));
    }
}

谢谢



1> Adil Hussain..:

我已经设法在我的build.gradle文件中使用这些依赖项:

androidTestCompile 'com.android.support:support-annotations:23.1.0'
androidTestCompile 'com.android.support.test:runner:0.4.1'
androidTestCompile 'com.android.support.test:rules:0.4.1'
androidTestCompile 'org.hamcrest:hamcrest-library:1.3'
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.1'

您需要使用以下ActivityTestRule.runOnUiThread(@NotNull java.lang.Runnable runnable)方法:

@Test
public void testRecipeRender() throws Throwable {
    // When.
    activityTestRule.runOnUiThread(new Runnable() {

        @Override
        public void run() {
            activityTestRule.getActivity().render(someRecipe);
        }
    });

    // Then.
    // assert stuff about the recipe rendering here
}

推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有