zoukankan      html  css  js  c++  java
  • 2、Android构建本地单元测试

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

    配置你的测试环境

    前文已经叙述。

    创建一个本地单元类

    你的本地测试单元类风格类似Junit 4测试类。Junit是Java最流行应用最广泛的单元测试类。最新的版本,Junit 4,允许你用比之前版本更简洁和灵活的方式编写测试。跟之前的版本不同,在Junit 4中,你不需要扩展junit.framework.TestCase类了。你也不需要在每个测试方法前加前缀test或者使用在junit.framework 或 junit.extensions中的包。
    创建一个基本的Junit 4 测试类,你可以创建一个包含一个或多个测试方法的Java类。每个测试方法都用@Test 标注。如下:

    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方法来执行检查。

    模拟Android 依赖

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

    本文作者:宋志辉
    个人微博:点击进入

  • 相关阅读:
    使用jquery.validate.js实现boostrap3的校验和验证
    MySQL 随机取数据效率问题
    qq在线客服代码
    使用Shell脚本查找程序对应的进程ID,并杀死进程
    Redis-概述
    JVM的类加载机制
    volatile
    java内存相关
    设计模式--模板方法
    设计模式概述
  • 原文地址:https://www.cnblogs.com/hainange/p/6153452.html
Copyright © 2011-2022 走看看