2015-06-09 1 views
5

Я хочу протестировать фрагмент UserConnectFragment, который содержит переменную PlateformConnect. Этот класс имеет метод для инициализации Facebook SDK:Robolectric: как тестировать класс, который использует экземпляр приложения внутри?

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

Я Увеличенная Android приложения с MyApplication класса.

В 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 ??

Спасибо, ребята!

ответ

6

Я нашел решение: просто добавьте @Config (xxx), чтобы установить имя класса приложения.

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

... 

Подробнее здесь: http://robolectric.org/custom-test-runner/