05-Junit

一个Service对应一个junit类,一个方法对应一个或多个@Test

  1. 正常输入
  2. 异常输入
  3. 特例输入
  4. 边界值

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);
}
image-20230911103223482

2. assertTrue

@Test
public void junit() {
    int i = 1 + 1;
    Assertions.assertTrue(i == 3);
}
image-20230911103248624

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);
    }
}