目录 start
目录 end
|2018-04-08| 码云 | CSDN | OSChina
添加依赖
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
例如该项目结构
├── pom.xml
└── src
├── main
│ └── java
│ └── com
│ └── github
│ └── kuangcp
│ └── Caculate.java
└── test
└── java
└── com
└── github
└── kuangcp
├── AssertTest.java
└── CaculateTest.java
如果是Idea然后使用快捷键Ctrl Shift T即可自动创建测试类
也可以使用
@Rule
来规定测试类中所有测试方法
@Rule
public Timeout timeout = new Timeout(1000);
assert a == null
import static org.junit.Assert.*
, 使用其大量工具方法, 完整方法请查看源码
assertNull(java.lang.Object object)
检查对象是否为空assertNotNull(java.lang.Object object)
检查对象是否不为空assertEquals(double expected, double actual, double delta)
检查 指定精度 的double值是否相等assertNotEquals(double expected, double actual, double delta)
检查 指定精度 的double值是否不相等assertFalse(boolean condition)
检查条件是否为假assertTrue(boolean condition)
检查条件是否为真assertSame(java.lang.Object expected, java.lang.Object actual)
检查两个对象引用是否引用同一对象(即地址是否相等)assertNotSame(java.lang.Object unexpected, java.lang.Object actual)
检查两个对象引用是否不引用统一对象(即地址不等)assertArrayEquals(Object[] a, Object[] b)
检查两个数组是否相等assertThat(T, Matcher<? super T>)
检查泛型是否匹配fail(String string)
依据入参并宣告测试失败public class AssertTest {
@Test
public void testEquals(){
String a = "hi";
String b = "hi";
// 使用assert关键字
assert a.equals(b);
// 使用Assert类的静态工具方法
assertEquals(a, b);
assert a == b;
assertSame(a, b);
// 因为trim 调用了SubString方法, 而这个方法是返回一个new的字符串
String c = "h"+"i".trim();
assertEquals(a, c);
assertSame(a, c);
}
@Test
public void testFail(){
fail();
fail("测试失败");
}
}
Junit 4 参数化测试 允许通过变化范围的参数值来测试方法 | 个人认为: 将测试方法的入参集合数据和测试行为分离开, 简化书写逻辑
@RunWith(Parameterized.class)
@Parameterized.Parameters
注解的公共静态方法,它将需要测试的各种变量值通过集合的形式返回;// 1
@RunWith(Parameterized.class)
public class CaculateTest {
// 2
private double numA;
private double numB;
// 3
public CaculateTest(double numA, double numB) {
this.numA = numA;
this.numB = numB;
}
// 4
@Parameterized.Parameters
public static Collection<Object[]> data(){
Object[][] data = new Object[][]{
{2, 4},
{3, 5}
};
return Arrays.asList(data);
}
// 5
@Test
public void testAdd() throws Exception {
Caculate caculate = new Caculate();
double result = caculate.add(numA, numB);
System.out.println("input "+numA+" + "+numB+" = "+result);
assert result != 0;
}
// 别的方法也是可以一样的使用, 而且所有的测试方法都受到了影响 都会迭代多次
@Test
public void testDevide(){
double result = caculate.devide(numA, 3);
System.out.println("input "+numA+" + "+3+" = "+result);
assert result != 0;
}
}
最后执行testAdd 测试方法的结果是: 将data方法返回的数据迭代执行testAdd,
Junit 4允许通过使用测试套件类批量运行测试类 | 批量执行测试类, 组装为一个套件,一起执行
@RunWith(Suite.class)
@SuiteClasses(TestClass1.class, TestClass2.class)
@RunWith(Suite.class)
@Suite.SuiteClasses({AnnotationTest.class, EvenNumberCheckerTest.class})
public class SuiteTest {
}
注意最好不要在该测试类中书写测试方法, 因为运行不了, 但是如果写了, 直接运行该测试类却又不会受影响