1

我試圖讓我的測試與Robolectric.setupActivity(LoginActivity.class);一起工作,我的班級使用facebook sdk 4.0進行登錄。儘管我下面加FacebookSdk.sdkInitialize(this);Robolectric 3.0與Facebook的SDK 4.0

public class LoginActivity extends FragmentActivity { 

    private FragmentManager fragmentManager; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_login); 
     FacebookSdk.sdkInitialize(this); 

     if (savedInstanceState == null) { 
      fragmentManager = getSupportFragmentManager(); 
      ... 
     } 
    } 

我得到了我的測試中出現以下錯誤:

java.lang.RuntimeException at LoginActivityTest.java:32 
     Caused by: com.facebook.FacebookSdkNotInitializedException at LoginActivityTest.java:32 

這裏是我的測試類:

@RunWith(CustomRobolectricRunner.class) 
@Config(emulateSdk = 21, reportSdk = 21, constants = BuildConfig.class) 
public class LoginActivityTest { 

    private Button loginButton; 
    private ShadowActivity loginActivityShadow; 

    @Before 
    public void setUp() throws Exception 
    { 
     LoginActivity activity = Robolectric.setupActivity(LoginActivity.class); 

     loginButton = (Button) activity.findViewById(R.id.loginButton); 
     loginActivityShadow = Shadows.shadowOf(activity); 
    } 

    @Test 
    public void shouldStartFacebookActivityWhenLoginButtonIsClicked() 
    { 
     Intent intent = loginActivityShadow.getNextStartedActivity(); 
     loginButton.performClick(); 
     //assertThat(activity, new StartedMatcher(com.facebook.LoginActivity.class)); 
    } 

} 

謝謝你的幫助。

回答

0

在致電setContentView(R.layout.activity_login);之前,您需要致電FacebookSdk.sdkInitialize(this);

+0

仍然不起作用:( – 2015-04-02 20:16:19

+0

它是否是同樣的錯誤?您是否可以調試並看到sdkInitialize調用正在被命中?如果您同時使用PowerMockito,則它將不起作用,因爲ClassLoader PowerMockito使用與Robolectric使用的不同,所以第一次調用將在PowerMockito ClassLoader中初始化類,第二次調用Robolectric ClassLoader。 – 2015-04-02 20:21:56

+0

與之前一樣的錯誤,我沒有使用Powermockito,但是我正在使用mockito該錯誤是如下:'產生的原因:空 \t在com.facebook.internal.Validate.sdkInitialized(Validate.java:99) \t在com.facebook.FacebookSdk.getApplicationId(FacebookSdk.java:660) \t在com.facebook.FacebookRequestE rror.getErrorClassification(FacebookRequestError.java:429)' – 2015-04-02 21:05:31