JUnit 4 核心API(JUnit 中的最重要的程序包是 junit.framework 它包含了所有的核心类)
类的名称 | 类的功能 | 继承关系 |
---|---|---|
Assert | assert 方法的集合 | public class Assert extends java.lang.Object |
TestCase | 一个定义了运行多重测试的固定装置 | public abstract class TestCase extends Assert implements Test |
TestResult | TestResult 集合了执行测试样例的所有结果 | public class TestResult extends Object |
TestSuite | TestSuite 是测试的集合 | public class TestSuite extends Object implements Test |
Assert类:
//检查两个变量或者等式是否相等
void assertEquals(boolean expected, boolean actual);
//检查条件是假的
void assertFalse(boolean condition);
//检查对象是否不为空
void assertNotNull(Object object);
//检查对象是否为空
void assertNull(Object object);
//检查条件为真
void assertTrue(boolean condition);
//在没有报告的情况下使测试不通过
void fail();
TestCase类:
//为被run(TestResult result) 执行的测试案例计数
int countTestCases();
//创建一个默认的 TestResult 对象
TestResult createResult();
//获取 TestCase 的名称
String getName();
//一个运行这个测试的方便的方法,收集由TestResult 对象产生的结果
TestResult run();
//在 TestResult 中运行测试案例并收集结果
void run(TestResult result);
//设置 TestCase 的名称
void setName(String name);
//创建固定装置,例如,打开一个网络连接
void setUp();
//拆除固定装置,例如,关闭一个网络连接
void tearDown();
//返回测试案例的一个字符串表示
String toString();
TestResult类:
//在错误列表中加入一个错误
void addError(Test test, Throwable t);
//在失败列表中加入一个失败
void addFailure(Test test, AssertionFailedError t);
//显示测试被编译的这个结果
void endTest(Test test);
//获取被检测出错误的数量
int errorCount();
//返回错误的详细信息
Enumeration errors();
//获取被检测出的失败的数量
int failureCount();
//运行 TestCase
void run(TestCase test);
//获得运行测试的数量
int int runCount();
//声明一个测试即将开始
void startTest(Test test);
//标明测试必须停止
void stop();
TestSuite类:
//在套中加入测试
void addTest(Test test);
//将已经给定的类中的测试加到套中
void addTestSuite(Class<? extends TestCase> testClass);
//对这个测试即将运行的测试案例进行计数
int countTestCases();
//返回套的名称
String getName();
//在 TestResult 中运行测试并收集结果
void run(TestResult result);
//设置套的名称
void setName(String name);
//在给定的目录中返回测试
Test testAt(int index);
//返回套中测试的数量
int testCount();
//返回会失败的测试并且记录警告信息
static Test warning(String message);
1、JUnit 4 核心对象
JUnit概念 | 责任 |
---|---|
Assert | 断言,定义测试的条件:当条件成立时assert方法保存沉默,条件不成立时抛异常 |
测试 | 以@Test注解定义的一个测试方法,为运行该方法JUnit会创建一个包含类的新实例,然后再调用这个被@Test注解的方法 |
测试类 | 一个测试类是@Test方法的容器 |
Suite | Suite允许将测试类归为一个测试套件,加@RunWith注解执行测试套件 |
Runner | 测试运行器,Runner类用于运行测试 |
assert方法 | 描述 |
---|---|
void assertEquals(boolean expected, boolean actual) | 检查两个变量或者等式是否平衡 |
void assertTrue(boolean expected, boolean actual) | 检查条件为真 |
void assertFalse(boolean condition) | 检查条件为假 |
void assertNotNull(Object object) | 检查对象不为空 |
void assertNull(Object object) | 检查对象为空 |
void assertSame(boolean condition) | assertSame() 方法检查两个相关对象是否指向同一个对象 |
void assertNotSame(boolean condition) | assertNotSame() 方法检查两个相关对象是否不指向同一个对象 |
void assertArrayEquals(expectedArray, resultArray) | assertArrayEquals() 方法检查两个数组是否相等 |
2、JUnit 4 的测试运行器
运行器 | 目的 |
---|---|
org.junit.internal.runners.JUnit38ClassRunner | 该运行器包含在当前JUnit版本中用于向后兼容,它将测试用例作为JUnit 3.8 的测试用例来启动 |
org.junit.runners.JUnit4 | 该运行器将测试用例作为JUnit 4 的测试用例来启动 |
org.junit.runners.Parameterized | 该运行器可以使用不同参数来运行相同的测试集 |
org.junit.runners.Suite | Suite是一个包含不同测试的容器,同时 Suite 也是一个运行器,可以运行一个测试类中所有以@Test注释的方法 |
3、JUnit 4 和TestNG 注解
特性 | Junit4 | TestNG |
---|---|---|
测试注解 | @Test | @Test |
测试套件执行之前执行 | - | @BeforeSuite |
测试套件执行之后执行 | - | @AfterSuite |
测试之前执行 | - | @BeforeTest |
测试之后执行 | - | @BeforeTest |
在一个测试方法所属的任意一个组的第一个方法被调用之前执行 | - | @BeforeGroups |
在一个测试方法所属的任意一个组的第一个方法被调用之后执行 | - | @AfterGroups |
在当前类的任意一个测试方法调用之前执行 | @BeforeClass,被注释的方法必须是公有且静态的方法 | @BeforeClass |
在当前类的任意一个测试方法调用之后执行 | @AfterClass,被注释的方法必须是公有且静态的方法 | @AfterClass |
每个测试方法之前执行 | @Before,被注释的方法必须是公有的方法 | @BeforeMethod |
每个测试方法之后执行 | @After,被注释的方法必须是公有的方法 | @AfterMethod |
忽略测试 | @Ignore | @Test(enable = false) |
预期异常(异常测试) | @Test(expected = ArithmeticArithmeticException.class) | @Test(expectedException = ArithmeticArithmeticException.class) |
超时测试 | @Test(timetimeout = 1000) | @Test(timetimeout = 1000) |
JUnit 4 和 TestNG 之间注解方面的区别主要有以下几点:
a.在Junit 4 中,如果需要在方法前面使用@BeforeClass和@AfterClass,那么该测试方法则必须是静态方法。TestNG 在方法定义部分则更加的灵活,它不需要类似的约束。
b. 在Junit 4中,注解的命名是比较令人困惑的,例如 Before, After and Expected,我们不是很确切的能理解在方法前面有Before和After这样的注解是做什么的,同样Expected也如此。TestNG在这方面做的就好很多,注解使用了BeforeMethod,AfterMethod和ExpectedException,这样的名字就非常好理解了。
来源声明:JUnit 4 与 TestNG对比: https://www.jianshu.com/p/afb04d5a1f1b
入门教程:https://wiki.jikexueyuan.com/project/junit/
junit 5 官网:https://junit.org/junit5/