如何在android studio中的Robolectric单元测试中测试片段

时间:2017-04-14 07:50:01

标签: android unit-testing robolectric

在我的项目中,第一个屏幕是登录屏幕,而不是带有recylerview的片段,点击recylerview项目,片段获取替换,下一个片段出现包含recyler视图。如何使用roboelectric编写单元测试的测试用例。我是第一次使用机器人。请帮助我。

以下是我的loginScreen测试用例类

的代码
@RunWith(RobolectricTestRunner.class)
@Config(constants = BuildConfig.class,packageName = "com.project.app")
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class LoginScreenActivityTest {
    LoginScreenActivity activity;
    @Test
    public void a_loginPriceguide() throws Exception {
        activity = Robolectric.setupActivity(LoginScreenActivity.class);
        assertEquals("abc@gmail.com",activity.getUsername(0));
        assertEquals("abc123$",activity.getPassword(0));
        CheckBox remember_me = (CheckBox) activity.findViewById(R.id.remember_me);
        remember_me.performClick();
        Button btn = (Button)activity.findViewById(R.id.btn_login);
        btn.performClick();
    }

 @Test
    public void b_loginDialog() throws Exception{
        activity = Robolectric.setupActivity(LoginScreenActivity.class);
        try {
            Thread.sleep(10000);
            Intent i = new Intent(activity,MainActivity.class);
            activity.startActivity(i);

        } catch(InterruptedException ex) {
            Thread.currentThread().interrupt();
        }
    }

这是我为登录屏幕测试用例所做的,这个类工作正常。

但是使用recylerView的片段会出现空指针异常

片段测试用例代码

@RunWith(RobolectricTestRunner.class)
@Config(constants = BuildConfig.class,packageName = "com.project.app")
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class ProductTest {
    private Product fragment ;
    private LinearLayoutManager mockLayoutManager;
    ActivityController<FragmentActivity> activityController;
    @Before
    public void setUp() {
        mockLayoutManager = Mockito.mock(LinearLayoutManager.class);
        fragment = new Product();
    }
    @Test
    public void l_clickProduct() throws Exception {
        activityController = Robolectric.buildActivity(FragmentActivity.class);
        activityController.create().start();
        RecyclerView recyclerView = (RecyclerView) fragment.getView().findViewById(R.id.list);
        RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager();
        assertThat(layoutManager).isEqualTo(mockLayoutManager);
}

0 个答案:

没有答案