我想测试一个包含变量 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进行测试?
谢谢你们!
答案 0 :(得分:6)
我找到了解决方案:只需添加@Config(xxx)来设置Application类名称。
@RunWith(RobolectricTestRunner.class)
@Config(application = MyApplication.class)
public class UserConnectFragmentTest {
...
答案 1 :(得分:1)
ApplicationProvider.getApplicationContext()
为我工作。