二、Android构建本地单元测试

若是你的单元测试在Android中没有依赖或者只有简单的以来,你能够在你的本地开发环境中运行你的测试。这种测试比较高效由于它能让你避免将整个app安装到物理设备或虚拟机中执行单元测试。最后,执行单元测试的时间大量减小。你能够经过模拟框架,好比Mockito来模拟依赖关系。java

配置你的测试环境

前文已经叙述。android

建立一个本地单元类

你的本地测试单元类风格相似Junit 4测试类。Junit是Java最流行应用最普遍的单元测试类。最新的版本,Junit 4,容许你用比以前版本更简洁和灵活的方式编写测试。跟以前的版本不一样,在Junit 4中,你不须要扩展junit.framework.TestCase类了。你也不须要在每一个测试方法前加前缀test或者使用在junit.framework 或 junit.extensions中的包。
建立一个基本的Junit 4 测试类,你能够建立一个包含一个或多个测试方法的Java类。每一个测试方法都用@Test 标注。以下:markdown

import org.junit.Test;
import java.util.regex.Pattern;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

public class EmailValidatorTest {

    @Test
    public void emailValidator_CorrectEmailSimple_ReturnsTrue() {
        assertThat(EmailValidator.isValidEmail("name@email.com"), is(true));
    }
}

为了测试你的APP组件返回指望的记过,使用Assert方法来执行检查。app

模拟Android 依赖

默认状况下,Gradle的安卓插件依靠一个通过修改的android.jar的库,不包含任何真正的代码,调用的任何的Android的类都被视为异常。
你可使用一个模拟框架来排除你代码中额外的依赖,让你的组件经过指望的方式与依赖交互。
添加一个虚拟对象到你的本地单元测试,跟随以下几步:
一、 将Mockito依赖添加到build.gradle文件中
二、 在你的测试类前添加@RunWith(MockitoJUnitRunner.class)注解。
三、 建立一个mock对象,用@Mock注解框架

import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.CoreMatchers.*;
import static org.mockito.Mockito.*;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import android.content.SharedPreferences;

@RunWith(MockitoJUnitRunner.class)
public class UnitTestSample {

    private static final String FAKE_STRING = "HELLO WORLD";

    @Mock
    Context mMockContext;

    @Test
    public void readStringFromContext_LocalizedString() {
        when(mMockContext.getString(R.string.hello_word))
                .thenReturn(FAKE_STRING);
        ClassUnderTest myObjectUnderTest = new ClassUnderTest(mMockContext);
        String result = myObjectUnderTest.getHelloWorldString();
        assertThat(result, is(FAKE_STRING));
    }
}

本文做者:宋志辉
我的微博:点击进入单元测试

相关文章
相关标签/搜索