JUnit是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing framework)。Junit测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。Junit是一套框架,继承TestCase类,就可以用Junit进行自动测试了。
JUnit是Java开发中使用最多的测试框架之一。
本系列文章讲的所有内容都是基于Maven3+JUnit4.11,要使用JUnit只需要将JUnit的jar包引入到项目中即可。
首先写要测试的类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 1package com.tiamaes.junit;
2
3import java.util.regex.Matcher;
4import java.util.regex.Pattern;
5
6/**
7 * @author 王成委
8 *
9 */
10public class WordDealUtil {
11
12 /**
13 * 将Java对象名称格式化成数据库格式
14 * @param name Java对象名称
15 * @return
16 */
17
18 public static String wordFomat4DB(String name){
19
20
21 Pattern p = Pattern.compile("[A-Z]");
22 Matcher m = p.matcher(name);
23 StringBuffer sb = new StringBuffer();
24
25 while(m.find()){
26 System.out.println(m.group());
27 m.appendReplacement(sb, "_"+m.group());
28 }
29
30 return m.appendTail(sb).toString().toUpperCase();
31 }
32}
33
34
1
2 1下面写测试用例
2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72 1package com.tiamaes.junit;
2
3import static org.junit.Assert.*;
4
5import org.junit.Test;
6/**
7 * WordDealUtil测试用例
8 * @author 王成委
9 *
10 */
11public class WordDealUtilTest {
12
13 /**
14 * 正常情况
15 */
16 @Test
17 public void testWordFomat4DB() {
18 String target = "employeeInfo";
19 String result = WordDealUtil.wordFomat4DB(target);
20 assertEquals("EMPLOYEE_INFO", result);
21 }
22
23 /**
24 * 参数为null
25 */
26 @Test
27 public void wordFormat4DBNull(){
28 String result = WordDealUtil.wordFomat4DB(null);
29 assertNull(result);
30 }
31
32 /**
33 * 空字符串
34 */
35 @Test
36 public void wordFormat4DBEmpty(){
37 String result = WordDealUtil.wordFomat4DB("");
38 assertEquals("", result);
39 }
40
41 /**
42 * 首字母大写
43 */
44 @Test
45 public void wordFormat4DBBegin(){
46 String target = "EmployeeInfo";
47 String result = WordDealUtil.wordFomat4DB(target);
48 assertEquals("EMPLOYEE_INFO", result);
49 }
50
51 /**
52 * 尾字母大写
53 */
54 @Test
55 public void wordFormat4DBEnd(){
56 String target = "EmployeeInfoA";
57 String result = WordDealUtil.wordFomat4DB(target);
58 assertEquals("EMPLOYEE_INFO_A", result);
59 }
60
61 /**
62 * 多个大写字母相连
63 */
64 public void wordFormat4DBTogether(){
65 String target = "EmployeeAInfo";
66 String result = WordDealUtil.wordFomat4DB(target);
67 assertEquals("EMPLOYEE_A_INFO", result);
68 }
69
70}
71
72
1
2 1测试方法只需在方法上加上@Test注释就可以了,assertEquals方法有两个参数第一个是期望值,第二个是实际结果。
2
运行测试用例之后发现wordFormat4DBNull和wordFormat4DBBegin方法失败,即空参数和首字母大写的没有通过测试,然后修改方法,加上null判断和首字母大写判断,如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 1 /**
2 * 将Java对象名称格式化成数据库格式
3 * @param name Java对象名称
4 * @return
5 */
6 public static String wordFomat4DB(String name){
7
8 /**********************************************/
9 if(name == null) return null;
10 /**********************************************/
11
12 Pattern p = Pattern.compile("[A-Z]");
13 Matcher m = p.matcher(name);
14 StringBuffer sb = new StringBuffer();
15
16 while(m.find()){
17 /**********************************************/
18 if(m.start() != 0) {
19 m.appendReplacement(sb, "_"+m.group());
20 };
21 /**********************************************/
22 }
23
24 return m.appendTail(sb).toString().toUpperCase();
25 }
26
1
2 1再运行测试用例,这次测试通过,现在的代码已经比较稳定,可以提供给其他模块使用了。如果对此方法进行了修改或优化,只需要运行一次测试用例就可以知道方法是否正常。
2
在写测试用例时要尽量考虑到业务中可能出现的情况,是测试用例更加完善。