2Android构建本地单元测试

Posted 宋志辉

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2Android构建本地单元测试相关的知识,希望对你有一定的参考价值。

如果你的单元测试在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));
    

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

以上是关于2Android构建本地单元测试的主要内容,如果未能解决你的问题,请参考以下文章

单元测试在构建服务中失败,但不是在本地

单元测试之junit篇

单元测试之junit篇

TFS 构建定义 - 添加步骤以运行 DacPac 进行单元测试

Azure DevOps 管道 VS 测试失败。所有这些单元测试都在本地通过

在单元测试用例的 TFS 构建中找不到路径的一部分