JUnit —— TestSuite 的使用

摘要:
首先说一下,suite,中文是一套,一组的意思。那么,TestSuite,顾名思义,就是用来运行一组测试的。有两点需要说明:1、关于方法suite()的方法头正如注释里写道的,这个方法的方法头是固定的1publicstaticjunit.framework.Testsuite(){2//yourcode...3}2、测试类的构造方法测试类CourseDAOTest中第30行带参数的构造函数,在66行和67行用到了。

首先说一下,suite ,中文是 一套,一组的意思。

那么,TestSuite,顾名思义,就是用来运行一组测试的。

如何使用呢 ?

假设有个这样的测试类StudentDAOTest ,代码如下:

1 packageorg.young.junit.testsuite;
2 
3 importjunit.framework.TestCase;
4 
5 importorg.young.junit.testsuite.dao.StudentDAO;
6 importorg.young.junit.testsuite.dao.StudentDAOImpl;
7 importorg.young.junit.testsuite.entity.Student;
8 
9 public class StudentDAOTest extendsTestCase {
10     
11     privateStudentDAO dao;
12     
13     /**
14 * 创建 DAO 实例
15      */
16     public voidsetUp() {
17         dao = newStudentDAOImpl();
18 }
19 
20     public voidtestAdd() {
21         Student stu = newStudent();
22         
23 dao.add(stu);
24 }
25 
26     public voidtestDelete() {
27         
28         dao.delete("id");
29 }
30 
31     public voidtestUpdate() {
32         Student stu = newStudent();
33         
34 dao.update(stu);
35 }
36 
37     public voidtestLoadWithId() {
38         
39         Student stu = dao.load("xyz");
40         
41 assertNotNull(stu);
42 }
43     
44     public voidtestLoadWithNullOrEmptyStr() {
45         
46         Student stu = dao.load("");
47 assertNull(stu);
48         
49         stu = dao.load(null);
50 assertNull(stu);
51 }
52 
53 }

如果想一次执行几个方法,而不是所有方法改怎么办呢?

TestSuite 该上场了。

为了方便比较,再来一个测试类CourseDAOTest ,代码如下:

1 packageorg.young.junit.testsuite;
2 
3 importorg.junit.Before;
4 importorg.junit.Test;
5 importorg.young.junit.testsuite.dao.CourseDAO;
6 importorg.young.junit.testsuite.dao.CourseDAOImpl;
7 importorg.young.junit.testsuite.entity.Course;
8 
9 importjunit.framework.TestCase;
10 importjunit.framework.TestSuite;
11 
12 /**
13 * Suite 的实现方式一
14 * 
15 *     public static Test suite(){} 的方式
16 *
17 * @authorby Young.ZHU
18 *        on 2013-9-30
19 *
20 * Package&FileName: org.young.junit.testsuite.CourseDAOTest
21  */
22 public class CourseDAOTest extendsTestCase {
23     
24     privateCourseDAO dao;
25     
26     publicCourseDAOTest() {
27         super();
28 }
29 
30     publicCourseDAOTest(String name) {
31         super(name);
32 }
33 
34 @Override
35     protected void setUp() throwsException {
36         super.setUp();
37         
38         dao = newCourseDAOImpl();
39 }
40     
41     /**
42 * 注意:继承 TestCase 后,JUnit 4 里的 @Before 、@Test 等注解就没用了
43 * 
44 * @Before 的功能可由方法 setUp() 实现
45      */
46 @Before
47     public voidinit() {
48         System.out.println("fsdfsdf");
49         dao = newCourseDAOImpl();
50 }
51     
52     /**
53 * 执行这个测试类的部分方法
54 * 
55 * 方法头必须是这样的 public static junit.framework.Test suite()
56 * 即,静态(static) 的
57 * 
58 * @return
59      */
60     public staticjunit.framework.Test suite() {
61         TestSuite suite = newTestSuite();
62         
63         /*
64 * 字符串参数为想要执行的该测试类的方法
65          */
66         suite.addTest(new CourseDAOTest("testLoad"));
67         suite.addTest(new CourseDAOTest("testAdd"));
68         
69         returnsuite;
70 }
71 
72 @Test
73     public voidtestAdd() {
74         Course course = newCourse();
75         
76 dao.add(course);
77 }
78 
79 @Test
80     public voidtestDelete() {
81         fail("Not yet implemented");
82 }
83 
84 @Test
85     public voidtestUpdate() {
86         fail("Not yet implemented");
87 }
88 
89 @Test
90     public voidtestLoad() {
91         Course course = dao.load("course_id");
92         
93 assertNotNull(course);
94 }
95 
96 }

先运行一下,看下效果:

JUnit —— TestSuite 的使用第1张

虽然这个测试类写了增(add)、删(delete)、改(update)、查(load),但实际执行的只有两个方法 —— testLoad 和 testAdd 。

秘密就在于代码第 60 行的suite() 方法,这个方法决定了该测试类执行哪些方法。

有两点需要说明:

1、关于方法suite() 的方法头

正如注释里写道的,这个方法的方法头是固定的

1 public staticjunit.framework.Test suite() {
2        //your code ...  
3 }

2、测试类的构造方法

测试类CourseDAOTest 中第 30 行带参数的构造函数,在 66 行和 67 行用到了。

构造函数的参数即要执行的测试方法的名称。

最后,把两个集合起来看,测试类AllTest ,代码如下:

1 packageorg.young.junit.testsuite;
2 
3 importjunit.framework.TestSuite;
4 
5 
6 public classAllTest {
7 
8     public staticjunit.framework.Test suite() {
9         TestSuite suite = new TestSuite("All Test");
10         
11         /*
12 * StudentDAOTest 类的全部测试方法
13          */
14         suite.addTest(new TestSuite(StudentDAOTest.class));
15         /*
16 * CourseDAOTest 类的部分方法
17          */
18 suite.addTest(CourseDAOTest.suite());
19         
20         returnsuite;
21 }
22 
23 }

运行后,效果如下:

JUnit —— TestSuite 的使用第2张

详细代码可参考:

https://github.com/YoungZHU/CollectionCode4Java/tree/master/test/org/young/junit/testsuite

免责声明:文章转载自《JUnit —— TestSuite 的使用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇锁和多线程:3种锁的使用(二)Python3 -- 查看python安装路径以及pip安装的包列表及路径下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Error invoking SqlProvider method (com.github.abel533.mapper.MapperProvider.dynamicSQL). Cause: java.lang.InstantiationException: com.github.abel533.mapper.MapperProvider

org.apache.ibatis.exceptions.PersistenceException: ### Error querying database.  Cause: org.apache.ibatis.builder.BuilderException: Error invoking SqlProvider method (com.github.a...

基础概念总结(spring security、Quartz、JUnit测试)

1、Spring Security 的大体框架和原理 (1)在web.xml中配置过滤器,这样就可以控制这个项目的每个请求。 (2)在applicationContext.xml配置,其中http标签配置如何截用户请求,和配置用户认证(固定用户、使用数据库管理用户)。 (3)过滤器最上层为HttpSessionContextIntegrationFilt...

Springboot单元测试

一、前言 这次来介绍下Spring Boot中对单元测试的整合使用,本篇会通过以下4点来介绍,基本满足日常需求 Service层单元测试 Controller层单元测试 新断言assertThat使用 单元测试的回滚 Spring Boot中引入单元测试很简单,依赖如下: <dependency> <groupId>or...

在线测试JavaScript代码性能

(寻龙分金看缠山,一重缠是一重关,关门如有八重险,不出阴阳出八卦) JSLint JSLint是基于Web的验证JavaScript错误代码的工具。它拥有的功能及特定的设置来使用您的需求,自定义你的验证算法。 JsUnit JsUnit是一款在客户端(在浏览时)的单元测试JavaScript框架。对JavaScript而言,JUnit就像是它的一个端口。当...

安卓下如何使用JUnit进行软件测试

软件测试作为程序员必备的一项技能是决定软件开发周期长短以及软件运行成败的关键,可以说好的软件不是代码写得好而是有效的测试决定的。本文将介绍在android下利用eclipse进行开发时如何使用JUnit进行单元测试。一、测试的分类(仅举例其中一些方法)【根据测试是否知道代码】 1、黑盒测试(测试的时候不知道具体代码):指的是把被测的软件看作是一个黑盒子,我...

JUnit入门

一、简单介绍 JUnit是一个开源的java单元測试框架。在1997年,由 Erich Gamma 和 Kent Beck 开发完毕。这两个牛人中 Erich Gamma 是 GOF 之中的一个;Kent Beck 则在 XP 中有重要的贡献(你认为眼熟一点都不奇怪)。        正如常言道:“麻雀虽小,五脏俱全。” JUnit设计的很小巧,可是功能...