首先说一下,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. Js正则校验身份证号码

    原文链接:http://gongwen.sinaapp.com/article-126-cmd 这个其实不难,在网上多找一下总会有意外收获的.但是工欲善其事,必先利其器.我们需要了解一下身份证号的规则 ...

  2. 多目标线性规划求解方法及matlab实现

    转载: https://blog.csdn.net/wzl1997/article/details/79120323

  3. 图像处理、计算机视觉与模式识别“SCI期刊和顶级会议”总结

    期刊: best (1) IEEE Transactions on Pattern Analysis and Machine Intelligence,IEEE模式分析与机器智能汇刊,简称PAMI,是 ...

  4. Xcode : svn 无法上传静态库(.a)文件

    1.打开终端,输入cd,空格,然后将需要上传的.a文件所在的文件夹(不是.a文件)拖拽到终端(此办法无需输入繁琐的路径,快捷方便) ,回车:2.之后再输入如下命令:svn add xxx.a,回车:3 ...

  5. 安装Java Decompiler

    原文:https://blog.csdn.net/yh_zeng2/article/details/75948467 Java Decompiler是Java语言的反编译工具,具体介绍见博客Java ...

  6. Android开发学习笔记-自定义对话框

    系统默认的对话框只能显示简单的标题内容以及按钮,而如果想要多现实其他内容则就需要自定义对话框,下面是自定义对话框的方法. 1.先定义对话框的模版 <?xml version="1.0& ...

  7. mysql压缩版的安装教程

    1.     首先创建 my.ini,在mysql解压目录下的bin文件夹中新建一个名为 my.ini 的文件,内容为 [client] port=3306 default-character-set ...

  8. css段落首字母下沉

    摘要: 段落首字母放大是指放大段落开头的字母或者汉字,主要使用了css的first-letter伪类选择器. 单行放大: 在第一行内放大,效果如下: <!DOCTYPE html> < ...

  9. Tomcat------启动出错

    描述:在cmd中,执行startup.bar时,报错:Using CLASSPATH: "E:\Tomcat\bin\bootstrap.jar;E:\Tomcat\bin\tomcat-j ...

  10. Dubbo -- 系统学习 笔记 -- 配置参考手册

    Dubbo -- 系统学习 笔记 -- 目录 配置参考手册 <dubbo:service/> <dubbo:reference/> <dubbo:protocol/> ...