单元测试 - 注解篇

1. @RunWith 指定单测的运行环境

  • @RunWith(JUnit4.class) - JUnit4环境
  • @RunWith(MockitoJUnitRunner.class) - Mock环境
  • @RunWith(SpringJUnit4ClassRunner.class) / @RunWith(SpringRunner.class) - Spring环境  ps: SpringJUnit4ClassRunner 与 SpringRunner区别
    • SpringRunner继承自SpringJUnit4ClassRunner,无额外扩展
    • junit 4.12之前的版本只能用SpringJUnit4ClassRunner, 4.12之后的可以用
    • 未显式指定@RunWith的情况下,Junit使用默认的Runner(JUnit4.4之后 - BlockJunit4ClassRunner,JUnit4.4之前 - Junit4ClassRunner)
  • @RunWith(Suite.class) - 一套测试集合 (未研究

2. @ContextConfiguration  指定spring环境的相关配置,例如扫描路径 / 类等,加载ApplicationContext,启动spring容器,搭配@RunWith(SpringRunner.class)使用

  • @ContextConfiguration(classes = SimpleConfiguration.class)
  • @ContextConfiguration(locations = { "classpath:spring1.xml", "classpath:spring2.xml" }) 

3. @SpringBootTest - 作用同@ContextConfiguration

  • 与@ContextConfiguration区别:无需显示指定locations或classes, @SpringBootTest注解会自动会从当前包开始,逐级向上查找被@SpringBootApplication或@SpringBootConfiguration注解的类
  • 包含了@ExtendWith({SpringExtension.class})注解,使用的@SpringBootTest后无需再指定Spring Runner,即不用再使显式用@RunWith(SpringRunner.class)  / @ExtendWith({SpringExtension.class})
    单元测试 - 注解篇_第1张图片

4. @ExtendWith - Junit5中的注解,等同于@RunWith

可以在@RunWith基础上进行扩展,利用一个Test及需要Spring环境又需要Mock环境

@RunWith(MockitoJUnitRunner.class)
@ExtendWith(MockitoExtension.class)
public class Test {

}

5. @AutoConfigureMockMvc

等同于mockMvc = MockMvcBuilders.standaloneSetup(xxController).build();

6. @WebMvcTest(xx.class) - 测试Controller

  • 此注解中已经引入了@AutoConfigureMockMvc,也就是说可以注解注入MockMvc
  • 配合@RunWith(SpringRunner.class) ,只会加载在@WebMvcTest注解上指定的class
  • 如果有需要mock的对象,配合@MockBean使用

最简单的单元测试 - 直接在方法上使用@Test注解即可

@Test
public void test() {

}

mock场景

普通方法的mock
1. 编程方式
@Before
public void setUp() throws Exception {
    MockitoAnnotations.openMocks(this);
}
2. 注解方式,在整个测试类上添加注解 @RunWith(MockitoJUnitRunner.class)

3. 在1或2的基础上配合 @InjectMocks、@Mock

mvc的mock,主要为了构造MockMvc 
1. 编程方式
public class Test {
    @Autowired
    MockMvc mockMvc;

    @Before
    public void setup() {
        mockMvc = MockMvcBuilders.standaloneSetup(xxController).build();
    }
}


2. 在整个类上使用注解@AutoConfigureMockMvc
@AutoConfigureMockMvc
public class Test {
    @Autowired
    MockMvc mockMvc;
}
3. 在1或2基础上配合@InjectMocks、@Mock、 @Autowired MockMvc


参考 

SpringBoot Test及注解详解 - codedot - 博客园 (cnblogs.com)

你可能感兴趣的:(单元测试,java)