Android Roboelectric断言因共享首选项而失败

Android Roboelectric断言因共享首选项而失败,android,junit4,robolectric,Android,Junit4,Robolectric,提到这一点,我试图保存共享首选项,但我的断言失败了 这是我的测试课 @Test public void testSharedPreferences(){ activity=actController.create().get(); loginButton=(Button)activity.findViewById(R.id.loginButton); userName=(EditText)activity.findViewById(R.id.userName); userPassword=

提到这一点,我试图保存共享首选项,但我的断言失败了

这是我的测试课

@Test
public void testSharedPreferences(){
activity=actController.create().get();
 loginButton=(Button)activity.findViewById(R.id.loginButton);
 userName=(EditText)activity.findViewById(R.id.userName);
 userPassword=(EditText)activity.findViewById(R.id.userPassword);
 sharedPrefs =    ShadowPreferenceManager.getDefaultSharedPreferences(Robolectric.application.getApplicationContext());
 sharedPrefs.edit().putString("userName", "user1").commit();

 assertThat(userName.getText().toString(),equalTo("user1"));

}
这是测试类中的代码-

public class LoginActivity extends Activity {
private EditText userName,userPassword;
 @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
       SharedPreferences sharedPreferences =PreferenceManager.getDefaultSharedPreferences(this);
         final SharedPreferences.Editor editor=sharedPreferences.edit();
         String name = sharedPreferences.getString("userName", "");
         if (!"".equalsIgnoreCase(name)) {
            userName.setText(name);
        }
}

断言
失败,它说预期的
“user1”
但找到了

您的测试首先创建活动(并过早触发
onCreate()
),因此您对SharedPref的更改没有效果。请尝试以下方法:

@Test
public void testSharedPreferences() {
     // First set up the shared prefs
     sharedPrefs = ShadowPreferenceManager.getDefaultSharedPreferences(Robolectric.application.getApplicationContext());
     sharedPrefs.edit().putString("userName", "user1").commit();

     // Create the activity - this will call onCreate()
     activity=actController.create().get();
     loginButton=(Button)activity.findViewById(R.id.loginButton);
     userName=(EditText)activity.findViewById(R.id.userName);
     userPassword=(EditText)activity.findViewById(R.id.userPassword);

     // Verify text
     assertThat(userName.getText().toString(),equalTo("user1"));

}

谢谢,我刚要做这件事,看到有人回答:)。