05-Junit
一个Service对应一个junit类,一个方法对应一个或多个@Test
- 正常输入
- 异常输入
- 特例输入
- 边界值
1. @ActiveProfiles
@ActiveProfiles("local")
2. @Test
// junit5 版本
import org.junit.jupiter.api.Test;
- 当类中没
@SpringBootTest
注解,只有@Test
注解。@Test
相当于main方法
3. Assertions
1. assertEquals
@Test
public void junit() {
int i = 1 + 1;
Assertions.assertEquals(1, i);
}
2. assertTrue
@Test
public void junit() {
int i = 1 + 1;
Assertions.assertTrue(i == 3);
}
4. @BeforeEach, @AfterEach
@BeforeEach
在所有@Test
注解前都执行一遍@AfterEach
在所有@Test
注解后都执行一遍
5. @BeforeAll, @AfterAll
- 必须为static方法。前、后只执行一次
6. @SpringBootTest
- 初始化spring上下文,可以进行依赖注入
- Junit4要配合
@RunWith
注解使用。
7. mock
- 对写数据库这些敏感的操作,进行模拟。因为写数据库可能造成一些不可挽回的改动
1. @MockBean
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import static org.mockito.Mockito.when;
/**
* @author: lisongtao
* @description: test
* @create: 2021-08-20 14:15
*/
@SpringBootTest
public class Junit {
/**
* mock没有指定规则返回默认值,int返回0,String返回null
*/
@MockBean
private Svc1 svc1;
@Test
public void test1() {
when(svc1.add(1, 1)).thenReturn(3);
// 指定了规则:3
int add = svc1.add(1, 1);
// 未指定规则:0
int minus = svc1.minus(2, 1);
Assertions.assertEquals(3, add);
Assertions.assertEquals(0, minus);
}
}
2. @SpyBean
- spy间谍
@SpringBootTest
public class Junit {
/**
* SpyBean指定规则走规则,没有规则走注入
*/
@SpyBean
private Svc1 svc1;
@Test
public void test1() {
when(svc1.add(1, 1)).thenReturn(3);
// 指定了规则:3
int add = svc1.add(1, 1);
// 未指定规则:1
int minus = svc1.minus(2, 1);
Assertions.assertEquals(3, add);
Assertions.assertEquals(0, minus);
}
}
8. svc1调用mock_svc2
@SpringBootTest
public class Junit {
@Resource
private Svc1 svc1;
/**
* svc1 内部调用了 svc2
*/
@MockBean
private Svc2 svc2;
@Test
public void test1() {
when(svc2.add(1, 1)).thenReturn(3);
// svc2指定了规则:3
int add = svc1.add(1, 1);
Assertions.assertEquals(3, add);
}
}