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));
        }
    }

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

  • 相关阅读:
    第k短路
    Codeforces Round #608 (Div. 2)
    Codeforces Round #606 E(无向图求pair(x,y)x到y的任意路径一定经过定点a和b的数量)
    Codeforces Round #603 (Div. 2)E
    题解报告:hdu 2717 Catch That Cow(bfs)
    题解报告:poj 3669 Meteor Shower(bfs)
    题解报告:poj 1321 棋盘问题(dfs)
    题解报告:hdu 1312 Red and Black(简单dfs)
    题解报告:poj 1426 Find The Multiple(bfs、dfs)
    hdu 4704 Sum(扩展欧拉定理)
  • 原文地址:https://www.cnblogs.com/hainange/p/6153452.html
Copyright © 2011-2022 走看看