首先说一下,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. table中td的内容换行。

    table设置样式: table-layout: fixed; td设置: word-wrap: break-word;

  2. 精心挑选的HTML5/CSS3应用及源码

    这段时间我已经为大家分享了不少关于HTML5应用和jQuery插件了,先来回顾一下: 炫酷霸气的HTML5/jQuery应用及源码 干货分享 超炫丽的HTML5/jQuery应用及代码 绚丽而实用的j ...

  3. win7下安装双系统Ubuntu14.04后开机没有win7,直接进入Ubuntu

    开机进入Ubuntu后,打开命令端,输入: sudo update-grub 然后重启,则解决问题

  4. 猫猫学iOS之小知识iOS启动动画_Launch Screen的运用

    猫猫分享,必须精品 原创文章.欢迎转载.转载请注明:翟乃玉的博客 地址:http://blog.csdn.net/u013357243? viewmode=contents 看下效果吧 比如新浪微博的 ...

  5. Thinkphp5笔记二:创建模块

    系统:window 7 64位 Thinkphp版本:5.0.5 环境:wampserver集成 我的项目是部署在本地www/thinkphp  目录下.在做之前,先要考虑清楚,你需要几个模块来完成你 ...

  6. Masonry插件:内容始终水平居中

    跟随浏览器框架大小,主题内容居中 代码 <!DOCTYPE html> <html> <head> <title>masonry瀑布流插件</ti ...

  7. 内存管理 初始化(八) 至kswapd_init

    至此,内存初始化部分已看完,遗留问题: 1.对于unicore或者mips的页表建立都很清楚,但是对于ARM我不清楚: 初始化部分涉及的页表映射建立,我都以unicore架构为准,ARM的页表映射从原 ...

  8. 【machine translate】deep learning seq2seq

    https://www.tensorflow.org/tutorials/seq2seq https://medium.com/@devnag/seq2seq-the-clown-car-of-dee ...

  9. 纯CSS制作的TAB选项卡

    代码 这里主要使用表单的单选按钮来实现这个TAB显示和隐藏,首页tab里的内容默认隐藏,如果单选按钮为选中状态(checked)就显示内容.具体请看下面代码. 关于兼容性,因为是用CSS3来制作的,所 ...

  10. linux环境中,如何使用tar来创建压缩包?解压缩?

    需求说明: 今天需要将一个tomcat目录打成压缩包,使用zip感觉有点慢,所以就想用tar来试试,之前一直使用tar的解压缩命令, 今天试试tar的压缩命令 操作过程: 1.通过tar的zcf选项进 ...