单元测试是对软件开发过程中必不可少的过程。准确的完备的单元测试可以帮助开发者提高代码质量,降低bug率。
测试代码必须要做一下几件事:
- 准备测试所需要的各种条件(创建所有需要的对象,分配必要的资源等等)
- 调用要测试的方法
- 验证被测试方法的行为和期望是否一致
- 完成后清理各种资源
JUnit各种断言
-
assertEquals 是否相等
参数说明:
- 中断时展示的信息(可选)
- 期望值
- 实际值
@Test
public void test() {
assertEquals("咋就不相等", 1,2);
}
-
assertNull 是否为空
参数说明:
- 中断时展示的信息(可选)
- 目标
-
assertSame 对象引用是否相同
参数说明:
- 中断时展示的信息(可选)
- 期望对象
- 目标对象
-
assertTrue 是否为真
参数说明:
- 中断时展示的信息(可选)
- 表达式
-
fail 立即失败
参数说明:
- 中断时展示的信息(可选)
-
assertThat
还有个assertThat方法,可以替代所有方法。需要引入静态类:
import static org.hamcrest.Matchers.*;
...
@Test
public void testThat() {
assertThat(1, is(1));
assertThat(1, not(2));
assertThat(null, nullValue());
User user = new User();
User user2 = user;
assertThat(user, sameInstance(user2));
assertThat(Boolean.TRUE, is(Boolean.TRUE));
}
annotation
@Test
标记一个方法为测试方法,同时注解里支持expected设置测试过程中预期抛出的异常,如果抛出对应异常,测试通过。
@Test(expected = Exception.class)
public void testException() {
assertThat(1,is(8/0));
}
@Before @After
在每个@Test方法执行前后被调用
@BeforeClass @AfterClass
在测试类初始化前和销毁之前调用,注意使用在静态方法上,通常完成一些耗时又通用的时候使用。
package com.zhongyouex.clothes.partner;
import com.sun.org.apache.xpath.internal.operations.Bool;
import org.apache.catalina.User;
import org.junit.*;
import org.junit.runner.RunWith;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
import static org.hamcrest.Matchers.*;
/***
* @Title
* @author lv
* @Date 2020/9/26 17:01
*/
@RunWith(SpringJUnit4ClassRunner.class)
public class TestTest {
@Test
public void test() {
assertEquals("咋就不相等", 1,1);
}
@Test
public void testThat() {
assertThat(1, is(1));
assertThat(1, not(2));
assertThat(null, nullValue());
User user = new User();
User user2 = user;
assertThat(user, sameInstance(user2));
assertThat(Boolean.TRUE, is(Boolean.TRUE));
}
@Test(expected = Exception.class)
public void testException() {
assertThat(1,is(8/0));
}
@Before
public void before() {
System.out.println("before");
}
@After
public void after() {
System.out.println("after");
}
@BeforeClass
public static void beforeClass() {
System.out.println("beforeClass");
}
@AfterClass
public static void afterClass() {
System.out.println("afterClass");
}
private class User {
private String name;
private int age;
}
}
网友评论