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

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

如何使用呢 ?

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

 package org.young.junit.testsuite;

 import junit.framework.TestCase;

 import org.young.junit.testsuite.dao.StudentDAO;
import org.young.junit.testsuite.dao.StudentDAOImpl;
import org.young.junit.testsuite.entity.Student; public class StudentDAOTest extends TestCase { private StudentDAO dao; /**
* 创建 DAO 实例
*/
public void setUp() {
dao = new StudentDAOImpl();
} public void testAdd() {
Student stu = new Student(); dao.add(stu);
} public void testDelete() { dao.delete("id");
} public void testUpdate() {
Student stu = new Student(); dao.update(stu);
} public void testLoadWithId() { Student stu = dao.load("xyz"); assertNotNull(stu);
} public void testLoadWithNullOrEmptyStr() { Student stu = dao.load("");
assertNull(stu); stu = dao.load(null);
assertNull(stu);
} }

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

TestSuite 该上场了。

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

 package org.young.junit.testsuite;

 import org.junit.Before;
import org.junit.Test;
import org.young.junit.testsuite.dao.CourseDAO;
import org.young.junit.testsuite.dao.CourseDAOImpl;
import org.young.junit.testsuite.entity.Course; import junit.framework.TestCase;
import junit.framework.TestSuite; /**
* Suite 的实现方式一
*
* public static Test suite(){} 的方式
*
* @author by Young.ZHU
* on 2013-9-30
*
* Package&FileName: org.young.junit.testsuite.CourseDAOTest
*/
public class CourseDAOTest extends TestCase { private CourseDAO dao; public CourseDAOTest() {
super();
} public CourseDAOTest(String name) {
super(name);
} @Override
protected void setUp() throws Exception {
super.setUp(); dao = new CourseDAOImpl();
} /**
* 注意:继承 TestCase 后,JUnit 4 里的 @Before 、@Test 等注解就没用了
*
* @Before 的功能可由方法 setUp() 实现
*/
@Before
public void init() {
System.out.println("fsdfsdf");
dao = new CourseDAOImpl();
} /**
* 执行这个测试类的部分方法
*
* 方法头必须是这样的 public static junit.framework.Test suite()
* 即,静态(static) 的
*
* @return
*/
public static junit.framework.Test suite() {
TestSuite suite = new TestSuite(); /*
* 字符串参数为想要执行的该测试类的方法
*/
suite.addTest(new CourseDAOTest("testLoad"));
suite.addTest(new CourseDAOTest("testAdd")); return suite;
} @Test
public void testAdd() {
Course course = new Course(); dao.add(course);
} @Test
public void testDelete() {
fail("Not yet implemented");
} @Test
public void testUpdate() {
fail("Not yet implemented");
} @Test
public void testLoad() {
Course course = dao.load("course_id"); assertNotNull(course);
} }

先运行一下,看下效果:

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

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

有两点需要说明:

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

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

 public static junit.framework.Test suite() {
// your code ...
}

2、测试类的构造方法

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

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

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

 package org.young.junit.testsuite;

 import junit.framework.TestSuite;

 public class AllTest {

     public static junit.framework.Test suite() {
TestSuite suite = new TestSuite("All Test"); /*
* StudentDAOTest 类的全部测试方法
*/
suite.addTest(new TestSuite(StudentDAOTest.class));
/*
* CourseDAOTest 类的部分方法
*/
suite.addTest(CourseDAOTest.suite()); return suite;
} }

运行后,效果如下:

详细代码可参考:

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

JUnit —— TestSuite 的使用的更多相关文章

  1. Java单元测试(Junit+Mock+代码覆盖率)

    微信公众号[程序员江湖] 作者黄小斜,斜杠青年,某985硕士,阿里 Java 研发工程师,于 2018 年秋招拿到 BAT 头条.网易.滴滴等 8 个大厂 offer,目前致力于分享这几年的学习经验. ...

  2. 深入探索 JUnit 4

    开始之前 关于本教程 引入 Java 5 注释为 JUnit 带来了显著改变,使它从一个受广大开发人员了解和喜爱的测试框架转变成了一个更为精简但却不那么为人熟知的框架.在本教程中,我将探讨 JUnit ...

  3. Java单元测试(Junit+Mock+代码覆盖率)---------转

    Java单元测试(Junit+Mock+代码覆盖率) 原文见此处 单元测试是编写测试代码,用来检测特定的.明确的.细颗粒的功能.单元测试并不一定保证程序功能是正确的,更不保证整体业务是准备的. 单元测 ...

  4. 【java测试】Junit、Mock+代码覆盖率

    原文见此处 单元测试是编写测试代码,用来检测特定的.明确的.细颗粒的功能.单元测试并不一定保证程序功能是正确的,更不保证整体业务是准备的. 单元测试不仅仅用来保证当前代码的正确性,更重要的是用来保证代 ...

  5. 如何使用 Java 测试 IBM Systems Director 的 REST API

    转自: http://www.ibm.com/developerworks/cn/aix/library/au-aix-systemsdirector/section2.html 如何使用 Java ...

  6. Java基础学习总结(24)——Java单元测试之JUnit4详解

    Java单元测试之JUnit4详解 与JUnit3不同,JUnit4通过注解的方式来识别测试方法.目前支持的主要注解有: @BeforeClass 全局只会执行一次,而且是第一个运行 @Before  ...

  7. junit4的进一步探讨

    上次只是大概记录了下junit4几个常见标签的用法. 在这篇文章中,我们来进一步分析junit4的用法. 1.断言 junit4中一个很常见的用法就是断言.说到断言,大家再熟悉不过了.不过也许有的朋友 ...

  8. JUnit之TestCase和TestSuite详解

    首先介绍下TestCase以及TestSuite.    TestCase:字面意思,测试用例.为一个或多个方法提供测试方法.一般是一个test    TestSuite:测试集合,即一组测试.一个t ...

  9. JUnit 3.8 让所有测试程序 实现 复合的测试(TestSuite)

    之前是单个单个程序测试,这种方式在测试类比较少的时候可行, 但测试类多了,单个单个的这个测试方式就不推荐了,那得使用 复合的测试了 一个TestSuite是一个复合的测试.它运行测试用例集.   这个 ...

随机推荐

  1. Java虚拟机垃圾收集器与内存分配策略

    Java虚拟机垃圾收集器与内存分配策略 概述 那些内存须要回收,什么时候回收.怎样回收是GC须要完毕的3件事情. 程序计数器.虚拟机栈与本地方法栈这三个区域都是线程私有的,内存的分配与回收都具有确定性 ...

  2. 如何使用 OpenFileDialog 组件 (选择文件组件)

        向程序设计窗体中添加一个OpenFileDialog控件,在属性对话框中设置其Filter属性为 "所有文件(*.*)|*.*|文本文件(*.txt)|*.txt|WPS文档(*.w ...

  3. 转:关于VS2012连接MySql数据库时无法选择数据源

    原文来自 http://www.cnblogs.com/sanduo8899/p/3698617.html 您的C#开发工具是用VS2012吗?     No! return;     您的数据库用的 ...

  4. HTML5视频破碎重组特效 强大视觉冲击

    HTML5视频播放器很多,但是HTML5视频特效还是很少见的,这款HTML5视频破碎重组特效非常刺激,给人强大的视觉冲击.点击视频任意地方,HTML5将会将这些区域击碎,过一段时间,这些被击碎的视频碎 ...

  5. linux内置软件安装命令

    yum -y install epel-release

  6. C#网络编程之Http请求

    本片篇分享简单介绍C#中的Http请求,前几天帮朋友的项目封装ApiHelper,我粗糙的结果就如下,想想我真的是差的太远了.还有一位架构师也在封装这个Helper , 所以最后的结果当然是使用大牛的 ...

  7. 114自定义UITableViewCell(扩展知识:为UITableViewCell添加动画效果)

    关键操作: 效果如下: ViewController.h #import <UIKit/UIKit.h> @interface ViewController : UITableViewCo ...

  8. 动态添加的html元素绑定事件的方法

    避免先写了DOM操作,但是元素是动态加载的,所以点击不生效,比较好的方法有两个: 1.动态添加的时候加行内事件,比如onclick="funcName()" 在js中写好方法名对应 ...

  9. SpringBoot整合cxf发布webService

    1. 看看项目结构图 2. cxf的pom依赖 1 <dependency>2 <groupId>org.apache.cxf</groupId>3 <art ...

  10. 分页功能实现之通过ajax实现表单内容刷新

    拿代码来说话 我们的需求就是点击翻页功能,实现表格内容局部刷新且能够翻到对应的页面上,不明白? 那么就看看下面的图,需要达到的效果如下所示: 现在要实现的功能就是把红线框起来的表单内容 在点击翻页的时 ...