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"));
}
谢谢,我刚要做这件事,看到有人回答:)。