本地测试和Instrumentation测试练习

作者: changer0 | 来源:发表于2018-04-14 14:18 被阅读15次

本篇讲解两个练习, 本地单元测试和Instrumentation测试.

练习: 创建本地单元测试

在接下来的练习中你将学到在Android 工程中如何创建一个简单的JUnit 4测试.

准备

在Android Studio 中创建一个Android工程, 并在app/build.gradle文件中添加JUnit 4依赖(参考上文).

创建测试

在你的 app/src/test 目录下创建如下面所示两个测试方法来测试ConverterUtil类

package com.lulu.androidtestdemo.androiduit;

import org.junit.Test;

import static junit.framework.Assert.assertEquals;

/**
 * Created by zhanglulu on 2018/2/24.
 */

public class ConverterUtilTest {
    @Test
    public void testConvertFahrenheitToCelsius() {
        float actual = ConverterUtil.convertCelsiusToFahrenheit(100);
        // expected value is 212
        float expected = 212;
        // use this method because float is not precise
        assertEquals("Conversion from celsius to fahrenheit failed", expected, actual, 0.001);
    }

    @Test
    public void testConvertCelsiusToFahrenheit() {
        float actual = ConverterUtil.convertFahrenheitToCelsius(212);
        // expected value is 100
        float expected = 100;
        // use this method because float is not precise
        assertEquals("Conversion from celsius to fahrenheit failed", expected, actual, 0.001);
    }
}

运行单元测试

通过运行相应的测试方法来确保单元测试正确执行,它们应该成功执行.

练习: Instrumentation 测试

这个练习使用到了模拟框架Mockito.请回顾之前Mock系列文章.

创建需要测试的类

添加以下工具类:

package com.lulu.androidtestdemo.instrumentation;

import android.content.Context;
import java.io.FileOutputStream;

/**
 * Created by zhanglulu on 2018/2/24.
 */
public class WriteConfigurationUtil {
    public static void writeConfiguration(Context ctx ) {
        try (FileOutputStream openFileOutput =
                     ctx.openFileOutput( "config.txt", Context.MODE_PRIVATE);) {

            openFileOutput.write("This is a test1.".getBytes());
            openFileOutput.write("This is a test2.".getBytes());
        } catch (Exception e) {
            // not handled
        }
    }
}

创建一个新的单元测试

编写一个单元测试来验证: openFileOutput()只被调用了一次,write()方法被调用了两次.

package com.lulu.androidtestdemo.instrumentation;

import android.content.Context;
import org.junit.Rule;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule;

import java.io.FileOutputStream;

import static org.junit.Assert.*;
import static org.mockito.ArgumentMatchers.*;
import static org.mockito.Mockito.*;

/**
 * Created by zhanglulu on 2018/2/24.
 */
public class WriteConfigurationUtilTest {
    @Rule
    public MockitoRule rule = MockitoJUnit.rule();
    @Mock
    Context context;
    @Mock
    FileOutputStream fileOutputStream;
    @Test
    public void writeShouldWriteTwiceToFileSystem() {
        try {
            when(context.openFileOutput(anyString(), anyInt())).thenReturn(fileOutputStream);
            WriteConfigurationUtil.writeConfiguration(context);
            verify(context, times(1)).
                    openFileOutput(anyString(), anyInt());
            verify(fileOutputStream, atLeast(2)).write(any(byte[].class));

        } catch (Exception e) {
            e.printStackTrace();
            fail();
        }
    }
}

右击执行该测试.(测试执行通过)

敲行代码再睡觉

相关文章

  • 本地测试和Instrumentation测试练习

    本篇讲解两个练习, 本地单元测试和Instrumentation测试. 练习: 创建本地单元测试 在接下来的练习中...

  • Robotium原理

    测试框架图: Android测试环境的核心是Instrumentation框架,Instrumentation框架...

  • Instrumentation测试进阶练习

    本篇文章主要讲解两个练习,如何测试Content Provider和Application 练习: 测试Conte...

  • Instrumentation测试进阶

    本篇主要讲解通过Instrumentation如何测试Android组件, 如何生成测试覆盖率报告等. 测试And...

  • 集成Robolectric做单元测试(1)

    背景 早期Junit 和Instrumentation能进行简单的单元测试,如果想进行复杂的UI与接口测试就难以用...

  • EOS 测试公网 Dawn 2.0

    概览 测试公网和主网的区别 节点 测试公网Endpoints 链接本地EOSD和测试公网 链接本地EOSC和测试公...

  • Instrumentation

    1、Instrumentation单元测试框架,基于Junit;Junit是java单元测试根本 2、想要进行自动...

  • Spark Streaming + Kafka

    Kafka Receiver 本地测试 服务端测试 Kafka Direct 本地测试 服务端测试

  • Android测试

    单元测试: 本地单元测试 仪器单元测试集成测试: 测试不易交互的部件: service和contentProvid...

  • 测试文章

    练习测试,练习测试

网友评论

    本文标题:本地测试和Instrumentation测试练习

    本文链接:https://www.haomeiwen.com/subject/vgllkftx.html