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