快捷搜索:  as  2018  FtCWSyGV  С˵  test  xxx  Ψһ  w3viyKQx

澳门威尼人斯app平台_龟发之家论坛



为何要编写单元测试?

企业开拓傍边,无论大年夜小项目都离不开测试,包括单元测试,回归测试,机能测试等等等等,而单元测试便是来验证法度榜样员写代码是否精确的有效手段,在日常开拓傍边编写单元测试是异常有需要的,试想一下若然正在开拓一个宏大年夜的项目,若然编写的每个营业逻辑都靠支配到办事器运行法度榜样经由过程前台界面点击来进行测试的话,第一:效率异常低下,不自动化,第二:若然某一天某处加入了新代码呈现了bug,查找出錯誤要費很大年夜的功夫,以是笔者建议开拓者要纯熟的掌握单元测试的编写

什么是Junit?

Junit是java领域占领率异常高的一个单元测试框架,已几近成为了单元测试的标准,当然JUnit还存在必然的毛病,本文先从JUnit的简单应用开始

单元测试的编写原则:

1.在eclipse中创建1个source folder命名为test(应用Maven后已要求创建)

2.测试类所在的包请乞降被测试类的包同等

3.测试类要应用Test作为开首或结尾,例如 --> UserServiceTest

4.测试类的每个措施,都必须是可以自力履行的,不存在顺序或依附

JUnit3和JUnit4的差别:

JUnit3中,测试类都必要承袭TestCase,而且测试类必要应用testXXX来作为开首,若然盼望在测试措施前运行某个初始化措施,这个措施的名称必须是setUp,在测试措施后运行某个措施名称澳门威尼人斯app平台必须是tearDown

在JUnit4中不必要承袭TestCase,而是应用了更为方便的annotation,只必要应用@Test来表示,测试前初始化措施应用@Before,测试后开释资本措施应用@After,若只想该措施只履行一次,应用@BeforeClass和@AfterClass

JUnit应用:

因为JUnit3和JUnit4的差别较为显着,以是笔者这里应用JUnit4进行解说

package com.accentrix.ray;

import org.junit.After;

import org.junit.AfterClass;import org.junit.Before;

import org澳门威尼人斯app平台.junit.BeforeClass;import org.junit.Test;

/*

* 测试类最基础的款式*/

public class TestUser {

@BeforeClasspublic static void init() {

/** 此措施只会在运行所有单元测试前履行一次,

* 平日用來获取数据库连接,Spring治理的Bean等等*/

}

@Beforepublic void setUp() {

/** 此措施运行每个单元测试前都邑履行,

* 平日用来筹备数据或获取单元测试依附的数据或工具*/

}

@Testpublic void testAddUser() {

/** 测试类的主要措施,在这里写所有的测试营业逻辑

*/}

@Test(expected = Exception.class)

public void testDleteUser() {/*

* 请留意评释上的experced,应用该参数代表可以觉得* 这个单元测试措施会抛出Exception的非常,若然没有视为不经由过程

*/}

@Test(timeout = 1000)

public void testUpdateUser() {/*

* 请留意评释上的timeout,应用该参数代表该单元测试必要* 在1000毫秒内完成,否则视为不经由过程,可以用做简单的机能测试

*/}

@After

public void tearDown() {/*

* 此措施运行每个单元测试后都邑履行,* 主要用来和setUp对应,清理获取的澳门威尼人斯app平台资本

*/}

@AfterClass

public static void destroy() {/*

* 此措施会在运行所有单元测试后履行一次,* 平日用来开释资本,例如数据库连接,IO流等等

*/}

}

经由过程上面的代码懂得到JUnit单元测试类的基础款式,但所有test的措施体都为空,下面就来看以下若何判断测试类是否成功并精确,经由过程断言(Assert)的要领判断测试是否经由过程

package com.accentrix.ray;

import java.util.HashMap;

import java.util.Map;

import org.junit.After;

//静态导入import static org.junit.Assert.*;

import org.junit.Before;import org.junit.Test;

public class TestUser {

private Map userMap = new HashMap();

// 添加10個用戶

@Beforepublic void setUp() {

for (int i = 0; i 10; i++) {userMap.put(i, new User(i, "123", "456"));

}}

@Test

public void testGetUser() {User user = userMap.get(1);

// 判断用户是否为空

// assertNull代表user必須为null才经由过程测试,第一個参数为提示信息assertNull澳门威尼人斯app平台("get user is null", user);

// 判断用户是否不为空

// assertNotNull代表user必须不为null才经由过程参数asser澳门威尼人斯app平台tNotNull("get user is not null", user);

// 判断用户名是否和输入同等

// 第一个参数为提示信息,第二个参数为实际的值,第三个参数为期望的值String newUsername = "admin";

assertEquals("用戶名不匹配", newUsername, user.getUsername());

// 判断给定用户名是否包孕在所有用户傍边// 若然包孕,測試通過

Integer userId = 1;assertTrue("用戶ID是否包孕在此中", userMap.containsKey(userId));

}

// 清空用戶

@Afterpublic void tearDown() {

userMap.clear();}

}

在开拓傍边,平日是定义了真实的营业类,然后再创建我们的测试类,当然测试驱动开拓例外,这里不多论述,当我们定义了多个测试措施,但还没供给实现时,可以选择用以下要领来提醒或包管还存在没实现的措施

package com.accentrix.ray;

import static org.junit.Assert.fail;

import org.junit.Ignore;

import org.junit.Test;

package com.accentrix.ray;

import static org.junit.Assert.fail;

import org.junit.Ignore;import org.junit.Test;

public class TestUser {

@Test

@Ignorepublic void testAddUser() {

//添加@Ignore后該措施將被轻忽而不去履行}

@Test

public void testGetUser() {//当运行测试时会提示该措施还没实现

fail("该措施暂时没供给实现");}

}

运行结果如上图

若何运行多个单元测试?

从上图可以看到,在运行单元测试的时刻都是一个单元测试类这样来运行的,但项目傍边可能存在上百个测试类的时刻,每次要手动一个一个单元测试的运行的确便是恶梦,以下我们来看一下若何集中运行所有的单元测试

起开创建1个Junit Test Suite,如下图

该类会天生以下的代码

package com.accentrix.ray;

import org.junit.runner.RunWith;

import org.junit.runners.Suite;import org.junit.runners.Suite.SuiteClasses;

@RunWith(Suite.class)

@SuiteClasses({ TestUser.class })public class AllTests {

/** @RunWith代表是運行Suite的类,固定写法

* @SuiteClasses中吸收一个数组,里面为你必要* 集中运行的测试类的class,以上代码为自动天生

* 当然读者可以经由过程Maven來运行单元测试,这里不过多论述*/

}

总结:

笔者在开拓项目的历程傍边,着实异常想维持编写JUnit的习气,但因为项目的规模和光阴的不容许,很多环境下都没有编写单元测试,但编写单元测试的益处是异常能表现出来的,若然是较大年夜型的项目,单元测试时异常异常需要,以是建议读者容许的环境下,只管即便应用单元测试来测试营业逻辑,当然Junit的能力也是有限的,例如必要结合其他的框架才能达到数据现场的掩护和调试Servlet,关于结合其他框架优化JUnit请把稳笔者更多文章

您可能还会对下面的文章感兴趣: