下载google的代码:https://github.com/android/testing-samples/tree/master/ui/espresso/BasicSample
下载我的代码:https://github.com/zhoulingluo/AndroidTest.git
题外话:看google是怎么获取和读取SharedPreferences
/**
* 保存一个对象
*/
public boolean savePersonalInfo(SharedPreferenceEntry sharedPreferenceEntry){
// 启动一个SharedPreferences事务。
SharedPreferences.Editor editor = mSharedPreferences.edit();
editor.putString(KEY_NAME, sharedPreferenceEntry.getName());
editor.putLong(KEY_DOB, sharedPreferenceEntry.getDateOfBirth().getTimeInMillis());
editor.putString(KEY_EMAIL, sharedPreferenceEntry.getEmail());
return editor.commit();
}
/**
* 获取 保存的对象
*/
public SharedPreferenceEntry getPersonalInfo() {
String name = mSharedPreferences.getString(KEY_NAME, "");
String email = mSharedPreferences.getString(KEY_EMAIL, "");
Long dobMillis =mSharedPreferences.getLong(KEY_DOB, Calendar.getInstance().getTimeInMillis());
Calendar dateOfBirth = Calendar.getInstance();
dateOfBirth.setTimeInMillis(dobMillis);
return new SharedPreferenceEntry(name, dateOfBirth, email);
}
以下是正文:
1.单元测试类在class头部加入
@RunWith(MockitoJUnitRunner.class)
2.自己创建模拟的类
private static final String TEST_NAME = "Test name";
private static final String TEST_EMAIL = "test@email.com";
private static final Calendar TEST_DATE_OF_BIRTH = Calendar.getInstance();
static {
TEST_DATE_OF_BIRTH.set(1980, 1, 1);
}
3.写@Mock
private SharedPreferenceEntry mSharedPreferenceEntry;
private SharedPreferencesHelper mMockSharedPreferencesHelper;
private SharedPreferencesHelper mMockBrokenSharedPreferencesHelper;
@Mock
SharedPreferences mMockSharedPreferences;
@Mock
SharedPreferences mMockBrokenSharedPreferences;
@Mock
SharedPreferences.Editor mMockEditor;
@Mock
SharedPreferences.Editor mMockBrokenEditor;
4.初始化
@Before
public void initMocks() {
mSharedPreferenceEntry = new SharedPreferenceEntry(TEST_NAME, TEST_DATE_OF_BIRTH,TEST_EMAIL);
// 创建模拟的SharedPreferences。
mMockSharedPreferencesHelper = createMockSharedPreference();
// 创建一个在保存数据时失败的模拟SharedPreferences。
mMockBrokenSharedPreferencesHelper = createBrokenMockSharedPreference();
}
5.每个方法之前写上@Test
@Test
public void sharedPreferencesHelper_SaveAndReadPersonalInformation() {
// 将个人信息保存到SharedPreferences
boolean success = mMockSharedPreferencesHelper.savePersonalInfo(mSharedPreferenceEntry);
assertThat("检查SharedPreferenceEntry.save……返回true",success, is(true));
// 从SharedPreferences读取个人信息
SharedPreferenceEntry savedSharedPreferenceEntry =mMockSharedPreferencesHelper.getPersonalInfo();
// 确保书面的和检索的个人信息是平等的。
assertThat("检查SharedPreferenceEntry.name是否已被正确持久化和读取",
mSharedPreferenceEntry.getName(),
is(equalTo(savedSharedPreferenceEntry.getName())));
assertThat("检查SharedPreferenceEntry。已持久化并读取出生日期 "
+ " 正确 ",
mSharedPreferenceEntry.getDateOfBirth(),
is(equalTo(savedSharedPreferenceEntry.getDateOfBirth())));
assertThat("检查SharedPreferenceEntry。电子邮件已被保存和阅读"
+ " 正确 ",
mSharedPreferenceEntry.getEmail(),
is(equalTo(savedSharedPreferenceEntry.getEmail())));
}
assertThat("检查SharedPreferenceEntry.save……返回true",success, is(true)); 的意思是success是true就是正常,如果是false就是报错并且返回-》检查SharedPreferenceEntry.save……返回true
6.
/**
* Creates a mocked SharedPreferences.
*/
private SharedPreferencesHelper createMockSharedPreference() {
// 模拟读取SharedPreferences,就好像mMockSharedPreferences是以前编写的一样
when(mMockSharedPreferences.getString(eq(SharedPreferencesHelper.KEY_NAME), anyString()))
.thenReturn(mSharedPreferenceEntry.getName());
when(mMockSharedPreferences.getString(eq(SharedPreferencesHelper.KEY_EMAIL), anyString()))
.thenReturn(mSharedPreferenceEntry.getEmail());
when(mMockSharedPreferences.getLong(eq(SharedPreferencesHelper.KEY_DOB), anyLong()))
.thenReturn(mSharedPreferenceEntry.getDateOfBirth().getTimeInMillis());
// 模拟成功的提交。
when(mMockEditor.commit()).thenReturn(true);
// 请求模拟程序时返回模拟程序。
when(mMockSharedPreferences.edit()).thenReturn(mMockEditor);
return new SharedPreferencesHelper(mMockSharedPreferences);
}
when(mMockSharedPreferences.edit()).thenReturn(mMockEditor);
when 一般后面都是有 配套的 比如thenReturn 意思是 模拟mMockSharedPreferences.edit()返回mMockEditor
代码:https://github.com/zhoulingluo/AndroidTest 下载后直接打开BasicSample,操作了之后,你就可以给自己的SharedPreferences 写测试用例了