《精通移动App测试实战:技术、工具和案例》---JUnit框架

1)JUnit框架介绍

JUnit是一个Java语言的单元测试框架。多数Java的开发环境都已经集成了JUnit作为单元测试的工具。需要了解程序的内部实现业务逻辑,知道被测试的软件如何(HOW)完成功能和完成什么样(What)的功能。

1.1)单元测试的重要性

单元测试(Unit Testing),是指对软件中的最小可测试单元进行的检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如在Java中单元指一个类,在C语言里单元指一个函数等。单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。通常,我们在编写大型应用系统的时候,都要写成千上万个方法或函数,这些方法或函数的功能通常都是有限的,但是它们却是这个应用系统的根基,只有确保每一个函数或者方法都实现了其意图,才能保证整个系统能够正常、准确地运行。千里之堤溃于蚁穴,如果我们没有对每一个细小的函数或者方法进行系统的单元测试,很有可能最后直接导致整个系统最终被淘汰的结果。由此可见,单元测试十分重要,也非常必要。

1.2)单元测试实施者

简而言之:开发要会,专业的白盒测试更要会。

1.3)单元测试的内容

我们在进行单元测试时,通常应把以下内容作为单元测试的重点。

(1)核心的类方法。

(2)异常处理内容。

(3)边界条件。

(4)算法效率。

(5)业务逻辑。

(6)需求变动频繁之处。

1.4)单元测试不测试的内容

我们在进行单元测试时,通常不应把以下内容作为单元测试的内容。

(1)不测构造函数。

(2)不测Setter()、Getter()方法。

(3)不测框架。

2)应用JUnit对Android项目进行单元测试

2.1)JUnit基于Android项目TestCase的应用

如果我们对基于Android系统项目开发有一定了解的话,相信一定能看出来,其核心代码是计算两个整数相加的函数。我们做单元测试当然也挑选其最核心的函数来进行测试。可以按照如下的步骤来创建一个基于Android项目的测试用例(TestCase)。

第一步:选择配置JUnit4

选中“CalculatorOfTwoNum”项目下的“src”目录中的“com.yuy.calculatoroftwonum”包里的“MainActivity.java”文件,单击鼠标右键,从弹出的快捷菜单中选择“New”菜单项,在其弹出的子菜单项中,再选择“JUnit Test Case”选项,如图所示。
在这里插入图片描述
在弹出的图2-4所示对话框中,我们选择“New JUnit 4 test”选项。为了便于我们对测试相关的用例进行管理,同时也为了不和原始的项目源代码混在一块,我们将测试用例放到“com.yuy.calculatoroftwonum.test”包下,因为是针对“MainActivity.java”文件进行的用例设计,所以在Name后的文本框输入“MainActivityTest”,该类的父类我们选择“android.test.AndroidTestCase”,创建“setUp()”和“tearDown()”方法。单击“Next”按钮,出现图2-5所示对话框,这里我们主要针对其关键的“add(int,int)”函数来进行测试,因此选中其前面的复选框,单击“Finish”按钮。
在这里插入图片描述
实际中,因为版本原因,这个超类才是我们默认的,可以点击浏览,进行android.test.AndroidTestCase超类的搜索:
在这里插入图片描述
在这里插入图片描述
然后在这里多了一个文件:
在这里插入图片描述
自动帮我们生成了3个函数,即setUp()、tearDown()和testAdd()函数。

  • setUp()函数:用来完成一些初始化的工作,比如创建被测试应用实例或者我们在测试应用的业务时可能会需要登录系统,那么可以将登录放在该部分
  • tearDown()函数:主要完成一些收尾性的工作,比如释放对象、资源等或者系统的登出
  • testAdd()函数:要测试的一些方法、函数,通常系统自动的帮我们在被测试的方法、函数的前面加上了一个“test”前缀,这是因为在JUnit3里,测试类必须继承TestCase类,方法必须是以“test”开头;在JUnit4里面,采用Annotation的JUnit已经不会霸道的要求必须继承自TestCase了,而且测试方法也不必以“test”开头了,只要以@Test注解来描述即可,无需继承TestCase类。

JUnit 4使用Java 5中的注解(Annotation),以下是JUnit 4常用的几个Annotation介绍。

  • @Before:初始化方法
  • @After:释放资源
  • @Test:测试方法,在这里可以设计一些测试用例,正常的、异常的测试用例
  • @Ignore:忽略的测试方法
  • @BeforeClass:针对所有测试,只执行一次,且必须为static void
  • @AfterClass:针对所有测试,只执行一次,且必须为static void
第二步:设计测试用例,并添加测试代码

书本举了三个简单的测试用例,例子来作演示:
在这里插入图片描述
以测试用例为依据,编辑的测试代码(MainActivityTest.java)为:

package com.example.calculatoroftwonum.test;

import com.example.calculatoroftwonum.MainActivity;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import android.test.AndroidTestCase;

public class MainActivityTest extends AndroidTestCase {
	MainActivity myapp = null;
	@Before
	protected void setUp() throws Exception {
		super.setUp();
		myapp = new MainActivity();
	}

	@After
	protected void tearDown() throws Exception {
		super.tearDown();
		myapp = null;
	}

	@Test
	public void testAdd() {
		assertEquals(myapp.add(3,2),5);
		assertEquals(myapp.add(1,99),100);
		assertEquals(myapp.add(1,10000),10001);
	}

}

修改前:
在这里插入图片描述
修改后:
在这里插入图片描述
这段代码中的断言语句是使用“assertEquals()”函数,就是(3,2)经过App操作之后是完全匹配5的就返回值是真。关于JUnit的断言还有很多,如assertTrue()、assertNull()、assertSame()等函数,通常它们有一个明显的标记就是函数名称前面都带有“assert”。

第三步:检查JUnit 4的相关库文件是否被配置

单击该项目的任意文件或者是包,而后单击鼠标右键,从快捷菜单中选择“Build Path”>“Configure Build Path …”菜单项,中文就是构建路径
在这里插入图片描述
请选择“Libraries”页,查看JUnit 4是否被添加,如果没有请单击“Add Library…”进行添加,
在这里插入图片描述
还要在“Order and Export”页查看“JUnit 4”是否被选中,如果没有被选中,则需选中该项
在这里插入图片描述

第四步:在“AndroidManifest.xml”进行配置

新增的代码如下:

 < uses-library android:name="android.test.runner" />
	<instrumentation android:name="android.test.InstrumentationTestRunner" 
   android:targetPackage="com.example.calculatoroftwonum" android:label="Tests for My App" />

在这里插入图片描述
原文解释:
在这里插入图片描述
在这里插入图片描述
这里疯狂给我报错说没有使用规范的”>"或”/>”,于是重新写了一边:

<instrumentation
        android:name="android.test.InstrumentationTestRunner"
        android:targetPackage="com.example.calculatoroftwonum"
        android:label="Tests for My App" />

又好了,母鸡啊,脑壳疼啊
在这里插入图片描述

第五步:配置成功之后执行

选中“MainActivityTest.java”,单击鼠标右键,选择“Run As”>“Android JUnit Test”
在这里插入图片描述
选择一下设备:
在这里插入图片描述
这里出现了我解决不了的问题:连接真机测试,APK能正常安装上,但是测试用例运行不了,什么测试结果也返回不了
在这里插入图片描述
在这里插入图片描述
选择开启一个模拟器,用模拟器再尝试一次:
在这里插入图片描述
在这里插入图片描述
依旧报错:
在这里插入图片描述

在“正在启动 MainActivityTest(1)”期间发生了内部错误。
org.eclipse.jdt.internal.junit.runner.IVisitsTestTrees.visitTreeEntry(Lorg/eclipse/jdt/internal/junit/runner/ITestIdentifier;ZI)V

2.2)JUnit基于Android项目TestSuite的应用

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值