Robolectric:如何测试里面使用应用程序实例的类?

时间:2015-06-09 15:07:11

标签: android robolectric

我想测试一个包含变量 PlateformConnect 的片段 UserConnectFragment 。这个类有一个初始化Facebook SDK的方法:

@Override
public void create() {
    FacebookSdk.sdkInitialize(MyApplication.getInstance().getApplicationContext());
}

我使用 MyApplication 类扩展了Android应用程序。

UserConnectFragment 中,我使用PlateformConnect:

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

    // Must be done before the content view assignement!
    PlateformConnect.getInstance().create(); 

...

在我的Robolectric类测试中:

@Before
public void setUp() throws Exception {
    // Create basic activity, and add fragment
    mActivity = Robolectric.buildActivity(FragmentActivity.class).create().start().resume().get();
    mUserConnectFragment = new UserConnectFragment();
    addMapFragment(mActivity, mUserConnectFragment);

    //mLoginButton = (Button)   mActivity.findViewById(R.id.facebook_button);
} 

此测试运行时发生崩溃:

java.lang.NullPointerException
    at com.xxx.yyyy.ui.intro.UserConnectFragment.onViewCreated(UserConnectFragment.java:77)

出现此错误是因为我使用:

MyApplication.getInstance().getApplicationContext()

...并且getInstance()返回null。

在我的应用程序中,我在很多类中使用 MyApplication.getInstance(),那么如何使用Robolectric进行测试?

谢谢你们!

2 个答案:

答案 0 :(得分:6)

我找到了解决方案:只需添加@Config(xxx)来设置Application类名称。

@RunWith(RobolectricTestRunner.class)
@Config(application = MyApplication.class)
public class UserConnectFragmentTest {

...

此处有更多详情:http://robolectric.org/custom-test-runner/

答案 1 :(得分:1)

ApplicationProvider.getApplicationContext() 为我工作。