首先说一下,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. log4net 日志配置及使用

    一.log4net按照不同的[LEVEL]级别输出到不同文件 <log4net> <!--错误日志:::记录错误日志--> <!--按日期分割日志文件 一天一个--> ...

  2. java.lang.IllegalArgumentException: Request header is too large 解决方案

    错误描述: java.lang.IllegalArgumentException: Request header is too large 问题分析: 请求头超过了tomcat的限值.本来post请求 ...

  3. Java常量池的理解

    1.常量池的好处常量池是为了避免频繁的创建和销毁对象而影响系统性能,其实现了对象的共享.例如字符串常量池,在编译阶段就把所有的字符串文字放到一个常量池中.(1)节省内存空间:常量池中所有相同的字符串常 ...

  4. CentOS 7下彻底卸载MySQL数据库

    转载: https://zhangzifan.com/centos-7-remove-mysql.html

  5. 算法-Java组合

    code: import org.assertj.core.util.Lists; import java.util.ArrayList; import java.util.Collections; ...

  6. HTML5 touche vents drag to move & AF actionsheet by longTap

    $('img').on("touchstart",function(E){ //E.preventDefault();E.stopPropagation(); var el=thi ...

  7. UNIX环境编程学习笔记(17)——进程管理之进程的几个基本概念

    lienhua342014-10-05 1 main 函数是如何被调用的? 在编译 C 程序时,C 编译器调用链接器在生成的目标可执行程序文件中,设置一个特殊的启动例程为程序的起始地址.当内核执行 C ...

  8. java中*和**的作用

    “*”就表示了所有的文件,但是“*”并不包括子目录下的文件: “**”匹配包含任意级子目录中所有的文件

  9. less语法(二)混合属性

    摘要: 前面介绍了less的变量和extend语法,今天在研究下混合属性(Mixin).混合可以说是less的另一个特征,你可以将通用属性定义在一块,然后使用时直接调用此混合属性. 混合: 在 LES ...

  10. ubuntu13.04 搭建 Nginx + PHP + PHP-FPM + Mysql (lnmp) 环境

    Nginx 是一个轻量级,以占用系统资源少,运行效率而成为web服务器的后起之秀,国内现在很多大型网站都以使用nginx,包括腾讯.新浪等大型信息网站,还有淘宝网站使用的是nginx二次开发的web服 ...