Android 单元测试 Mockito 官方代码 BasicSample 解析 从零开始

 

下载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 写测试用例了

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值