JUnit常用断言方法

时间:2023.11.26

JUnit断言方法有很多,不过,可以很清楚地从其子面看出其功能。

常用的方法如下:

assertEquals(a, b)

Asserts that two primitive values are equal.

测试a是否等于b(a和b是原始类型数值(primitive value)或者必须为实现比较而具有equal方法)

assertFalse(a)

Asserts that a condition (a) is false.

测试a是否为false(假),a是一个Boolean数值。

assertTrue(a)

Asserts that a condition is true.

测试a是否为true(真),a是一个Boolean数值

assertNotNull(a)

Asserts that an object isn't null.

测试a是否非空,a是一个对象或者null。

assertNull(a)

Asserts that an object is null.

测试a是否为null,a是一个对象或者null。

assertNotSame(a, b)

Asserts that two objects do not refer to the same object.

测试a和b是否没有都引用同一个对象。

assertSame(a, b)

Asserts that two objects refer to the same object.

测试a和b是否都引用同一个对象。


第二篇:JUnit使用方法以及测试代码覆盖率


Junit

一、 什么是junit

采用测试驱动开发的方式,在开发前先写好测试代码,主要说明被测试的代码会被如何使用,错误处理等,然后开始写代码。并在测试代码中逐步测试这些代码。直到最后在测试代码中完全通过。

二、 Junit功能

1) 管理测试用例。修改了哪些代码。这些代码的修改会对哪些部分由影响,

通过junit将这次的修改做完成测试。

2) 定义了测试代码,textcase根据源代码的测试需要定义每个textcase,并

将Textcase添加到相应的Textsuit以方便管理。

3) 定义测试环境,在Textcase测试前会先调用“环境”配置。在测试中使

用,当然也可以在测试用例中直接定义测试环境。

4) 检测测试结果。对于每种正常、异常情况下的测试,运行结果是什么。

结果是够是我们预料的等。都需要有明确的定义。Junit在这方面提供了强大的功能。

三、Junit核心类

Textsuit:测试用例的集合

Textcase:定义运行多个测试用例

TextListener:测试中若产生事件,会通知TextListener

BaseTextRunner:TextRunner用来启动测试界面

TextResult:收集一个测试案例的结果。测试结果分为失败和错误。

Assert:当条件成立时,assert方法保持沉默,但若条件不成立就抛出异常

四、使用举例

4.1方法一:

第一步、新建一个Android项目JUnit_Test,file-new-android project,然后编写一个Calculator类,new java class,实现简单的加、减、乘、除的计算器,然后对这些功能进行单元测试。

类的代码如下:

package com.neusoft;

public class Calculator {

}

result = result - 1; //Bug: 正确的应该是 result =result-n public void substract(int n) { result = result + n; private int result; public void add(int n) {

}

for (; ;) ; //Bug : }

}

} return result;} public int getResult() { public void clear() { result = 0; public void squareRoot(int n) { result = n * n;} public void square(int n) { result = result / n;} public void multiply(int n) {} public void divide(int n) {

第二步、将JUnit4单元测试包引入这个项目:在该项目上点右键,点“属性”, 在弹出的属性窗口中,首先在左边选择“Java Build Path”,然后到右上选择“Libraries”标签,之后在最右边点击“Add Library…”按钮, 然后在新弹出的对话框中选择JUnit4并点击确定, JUnit4软件包就被包含进我们这个项目了。

第三步、在Eclipse的Package Explorer中用右键点击该类弹出菜单,选择new—选择“Junit Text Case”。在弹出窗口,选择 new JUnit 4 text,在which method stubs would you like to creat?处选择setUp。点击“next”后,系统会自动列出你这个类中包含的方法,选择你要进行测试的方法。此处,我仅对“加、减、乘、除”四个方法进行测试。点击Finish后,系统会自动生成一个新类CalculatorTest,里面包含一些空的测试用例。只需要将这些测试用例稍作修改即可使用。完整的CalculatorTest代码如下:

package com.neusoft;

import static org.junit.Assert.*;

import org.junit.Before;

import org.junit.Test;

import org.junit.Ignore;

public class CalculatorTest {

private static Calculator calculator = new Calculator();

@Before

public void setUp() throws Exception {

calculator.clear();

}

@Test

public void testAdd() {

calculator.add(2);

calculator.add(3);

assertEquals(5, calculator.getResult());

}

@Test

public void testSubstract() {

calculator.add(10);

calculator.substract(2);

assertEquals(8, calculator.getResult());

}

@Ignore("Multiply() Not yet implemented")

@Test

public void testMultiply() {

fail("Not yet implemented");

}

@Test

public void testDivide() {

calculator.add(8);

calculator.divide(2);

assertEquals(4, calculator.getResult());

}

}

第四步,运行测试代码:按照上述代码修改完毕后,在CalculatorTest类上点右键,选择“Run As -JUnit Test”,会弹出下面对话框

选择Use configuration specific settings,选择Android Junit Test Launcher,点击ok。在结果当中,进度条是红颜色表示发现错误,具体的测试结果在进度条上面有表示“共进行了4个测试,其中1个测试被忽略,一个测试失败”

JUnit使用方法以及测试代码覆盖率

。点击左侧各个测试

类,可在Failure Trace处显示出失败信息。

4.2方法二

这里我们以项目工程EPG为例,进行一下测试。

第一步:右键点击EPG工程,选择new-Other…-Android下的Android Test Project。如图所示

点击next,进入如下界面。输入Project name,这里我输入EPGTest,在Select the project to test处选择An existing Android project 点击Browse 选择需要测试的工程。这里选择的是EPG。Build Target 选择与测试工程一致的版本。此处为Android3.1。点击finish

JUnit使用方法以及测试代码覆盖率

。完成创建。

第二部:在新建的测试程序中添加类,命名为TestWeeklyEPGActivity,让此类继承自ActivityInstrumenttationTestCase2<WeeklyEPGActivity>,然后加入所需要的包。加入的包为所测试工程的Activity的包名加名称。

importimportimportimport android.test.ActivityInstrumentationTestCase2; import android.view.View;

完整的测试代码如下

JUnit使用方法以及测试代码覆盖率

package com.sony.btv.epg.jp.test;

import com.sony.btv.epg.jp.basic.Titlebar;

import com.sony.btv.epg.jp.basic.WeeklyEPGActivity;

import com.sony.btv.epg.jp.R;

import android.test.ActivityInstrumentationTestCase2;

import android.view.View;

public class TestWeeklyEPGActivity extends

ActivityInstrumentationTestCase2<WeeklyEPGActivity> {

private View mainLayout;

public TestWeeklyEPGActivity() {

super("com.sony.btv.epg.jp.basic", WeeklyEPGActivity.class);

}

/* (non-Javadoc)

* @see android.test.ActivityInstrumentationTestCase2#setUp()

*/

protected void setUp() throws Exception {

super.setUp();

WeeklyEPGActivity mainActivity = getActivity();

mainLayout = (View) mainActivity.findViewById(R.layout.epg);

}

public void testCreateTitleBar()

{

assertNotNull(mainLayout);

Titlebar titlebar = null;

titlebar = (Titlebar)mainLayout.findViewById(R.id.epg_titlebar); assertNotNull(titlebar);

}

}

第三部,进入AndroidManifest.xml,添加

<instrumentation

android:targetPackage="com.sony.btv.epg.jp"

android:name="android.test.InstrumentationTestRunner" />和<uses-library android:name ="android.test.runner"/> 第四步 ,首先运行程序EPG,然后右键点击EPGTest-run as-Run Configurations,在左侧框内选择Android Junit Test目录下的EPGTest,然后点击run运行EPGTest。 第五步,运行结束,可以看到和上面第一种方法一样的结果。此处不再叠述。

五、案例分析

1.包含必需的包

import static org.junit.Assert.*;

import org.junit.Before;

import org.junit.Test;

2.测试类的声明

测试类是一个独立的类,没有任何父类。测试类的名字也可以任意命名,没有任何局限性。所以不能通过类的声明来判断它是不是一个测试类。

3. 创建一个待测试的对象

要测试哪个类,那么首先就要创建一个该类的对象。正如上面案例中的代码:

private staticCalculator calculator =newCalculator();

为了测试Calculator类,必须创建一个calculator对象。

4. 测试方法的声明

在测试类中,并不是每一个方法都是用于测试的,必须使用“标注”来明确表明哪些是测试方法。“标注”是JDK5的一个新特性,用在此处非常恰当。可以看到,在某些方法的前有@Before、@Test、@Ignore等字样,这些就是标注,以一个“@”作为开头。这些标注都是JUnit4自定义的,熟练掌握这些标注的含义非常重要。

5. 编写一个简单的测试方法

首先,要在方法的前面使用@Test标注,以表明这是一个测试方法。对于方法的声明也有如下要求:名字可以随便取,没有任何限制,但是返回值必须为 void,而且不能有任何参数。如果违反这些规定,会在运行时抛出一个异常。至于方法内该写些什么,那就要看需要测试些什么了。比如:

@Test

public void testAdd() {

calculator.add(2);

calculator.add(3);

assertEquals(5, calculator.getResult());

}

我想测试一下“加法”功能是否正确,就在测试方法中调用几次add函数,初始值为0,先加2,再加3,我们期待的结果应该是5。如果最终实际结果也是 5,则说明add方法是正确的,反之说明它是错的。assertEquals(5,

calculator.getResult());就是来判断期待结果和实际结果是否相等,第一个参数填写期待结果,第二个参数填写实际结果,也就是通过计算得到的结果。这样写好之后,JUnit会自动进行测试并把测试结果反馈给用户。

JUnit 提供了一种方法来区别他们,那就是在这种测试函数的前面加上

@Ignore标注,这个标注的含义就是“某些方法尚未完成,暂不参与此次测试”。这样的话测试结果就会提示你有几个测试被忽略,而不是失败。一旦你完成了相应函数,只需要把@Ignore标注删去,就可以进行正常的测试。

6. 忽略测试某些尚未完成的方法

JUnit提供了一种方法,就是在未完成的测试函数的前面加上@Ignore标注,这个标注的含义就是“某些方法尚未完成,暂不参与此次测试”。这样的话测试结果就会提示你有几个测试被忽略,而不是失败。当你完成了相应函数,只需要把@Ignore标注删去,就可以进行正常的测试。

7.Fixture

Fixture 的含义就是“在某些阶段必然被调用的代码”。比如我上面的测试,由于只声明了一个Calculator对象,他的初始值是0,但是测试完加法操作后,他的值就不是0了;接下来测试减法操作,就必然要考虑上次加法操作的结果。这绝对是一个很糟糕的设计!我们非常希望每一个测试都是独立的,相互之间没有任何耦合度。因此,我们就很有必要在执行每一个测试之前,对Calculator对象进行一个“复原”操作,以消除其他测试造成的影响。因此,“在任何一个测试执行之前必须执行的代码”就是一个Fixture,我们用@Before来标注它,如前面例子所示:

@Before public void setUp() throws Exception {

} calculator.clear();

这里不在需要@Test标注,因为这不是一个test,而是一个Fixture。同理,如果“在任何测试执行之后需要进行的收尾工作”也是一个Fixture,使用@After来标注。

参数timeout,指定被测试方法被允许运行的最长时间应该是多少,如果测试方法运行时间超过了指定的毫秒数,则JUnit认为测试失败。

8.设置最长执行时间

参数timeout,指定被测试方法被允许运行的最长时间应该是多少,如果测试方法运行时间超过了指定的毫秒数,则JUnit认为测试失败。

@Test(timeout)

public void testSubstract() {

calculator.add(10);

calculator.substract(2);

assertEquals(8, calculator.getResult());

}

9.类级别Fixture的设置方法

注解@BeforeClass修饰用于初始化Fixture的方法。注解@AfterClass 修饰用于注销Fixture的方法

@BeforeClass

public static void dbInit(){//类级别Fixture初始化方法

}

@AfterClass

public static void dbClose(){//类级别Fixture注销方法

}

类级别的Fixture方法,仅会在测试类中所有测试方法执行之前执行初始化,并在全部测试方法测试完毕之后执行注销方法。

10.Junit GUI

Junit.runner包中定义了Junit测试框架的交互模式。Base TextRunner抽象类是这个包的核心,所有Junit框架和外界进行交互的行为都被此包定义。有三种交互模式:

1) 字符串模式

2)

3) Swing模式 AWT模式

六、计算通过使用单元测试代码覆盖率

1.安装EclEmma插件

安装EclEmma插件的工程和大部分Eclipse插件相同,在此我选择从站点下载zip文件并解压到eclipse所在的目录中。进入点击download即可下载。安装完成需要重新启动Eclipse,工具栏上应该出现一个新按钮。

2.EclEmma的使用

上面我们已经对Calculator进行了Junit测试,之后我们点击新增按钮选择Coverage as Junit Text。执行之后,程序窗口的代码会变颜色。

JUnit使用方法以及测试代码覆盖率

其中绿色便是该行代码被完整的执行,红色部分便是该行代码根本没有执行,黄色的行便是该行代码部分被执行。

除此之外,在下面还有一个单独的视图来统计程序的覆盖代码率。

EclEmma提供的Coverage视图能够分层的显示代码的覆盖测试率。从图中我们可以读出代码运行之后的覆盖率。

JUnit使用方法以及测试代码覆盖率

JUnit使用方法以及测试代码覆盖率

更多相关推荐:
It用法总结

It的用法总结一、人称代词1,it的最基本用法是作代词,主要指刚提到的事物,以避免重复:①Theywatchedthetrainuntilitdisappearedinthedistance.2.,也可以指动物…

it用法总结

it的用法总结it用法虽不是高考的热点,但近几年全国各省市高考试题经常出现对it用法的考察。It的用法之多值得我们在学习过程中高度关注。同时我们不能疏忽it与其他语言知识点相结合进行命题的趋势。下面就帮你系统归…

It用法总结

It用法总结it的用法1.it作代词(1)在答语中替代this或that。如:-What'sthis?-It'safrog.(2)指已提到过的物体。如:I'velostitonmywayhome.(3)指情形、…

it用法小结

1.“it”用法小结“it”这个单词看起来虽然很简单,但是其用法很重要也很复杂。现“it”将用法做以小结,供大家参考。一用作人称代词1通常指人以外的生物和事物。E.g.---Haveyouseenmypen?-…

It用法及总结

It用法及总结陕西丹凤中学佘君贤1.it指时间,天气,距离,季节,环境以及自然现象。Eg.What’sthedatetoday?It’soctober27th.2.代替前面提到的事物。Eg.Thedocoter…

IT用法小结

It用法小结王婷婷It的用法复杂多变,现对it的用法小结一下。1.It用作人称代词:It可用代词,作人称代词,指前面已经提到过的事物,动物或人,在句中作主语或宾语.例如:1).Heboughtadictiona…

IT用法小结

高三英语辅导材料4:IT用法小结在初中阶段.我们就学过“it’’,它的用法是个难点.也是高考的热点之一。下面就结合高考题总结一下it的用法,以帮助高三考生复习这一块内容。一、作代词1、用作人称代词,可用来指人,…

it的用法

高考复习系列第一部分it的用法1TheParkersboughtanewhousebutwillneedalotofworkbeforetheycanmoveinit的用法AtheyBitConeDwhich2...

It用法小结

高考语法It用法小结It用法小结虽不是高考的热点但这两年全国各省市试题经常出现我们不能疏忽下面是用法20条并通过高考试题进行巩固1Itis被强调部分that该句型是强调句型将被强调的放在前面其他部分置于之后强调...

高考英语It的用法(专项总结及训练)

It的用法专项总结及训练一人称代词1it的最基本用法是作代词主要指刚提到的事物以避免重复Theywatchedthetrainuntilitdisappearedinthedistance2也可以指动物或婴儿未...

it的用法it用作虚主语或虚宾语的用法

1用于指时间It39sstillearly时间还早It39salreadynineo39clock已是9点了It39sthreeyearssincehelefthere他离开这儿已有3年了2用于指距离It39s...

it用法小结

It用法小结一用于指人以外的一切生物无生命的东西和事情1指动物和植物Ohit39sLucy39shatItlookslikeacatWhere39steagrownIt39sgrowninthesoutheas...

it用法总结(270篇)