一、junit基本参数介绍
| 参数 | 解释 |
|---|---|
| @BeforeClass | 在单元测试类中执行一次,在所有测试方法前执行一次 |
| @AfterClass | 在单元测试类中执行一次,在所有测试方法后执行一次,通常在其中写上销毀和释放资源的代码 |
| @Before | 在每个测试方法前执行,一股用来初始化方法(比如我们在測试别的方法时,类中与其 他测试方法共享的值已经被改变,为了保证测试结果的有效性,我们会在@Before注解 的方法中重置数据) |
| @After | 释放资源 ,对于每一个测试方法都要执行一次 |
| @Test{timeout =1000) | 测试方法执行超过1000室秒后算超时,测试将失败 |
| @Test(expected=Exception.class) | 测试方法期里得到的异常类,如果方法执行设有抛出指走的异常,则测试失败 |
| @lgnore(i!not ready yet,,) | 执行測试时将忽K掉此方法,如果用于修饰类,则忽15整个类 编写一股测试用例 |
| @Test | 编写一般测试用例 |
| @RunWith | 在JUnit中有很多个Runner,他们负责堝用你的测试代码,每一^Runne谢有各自的待 殊功能,你要根据需要选择不同的Runner来运行你的測试代码。如果我们只是简单的做 音通Java测试,不涉及Spring Web顷目,你可以省略@RunWith注解,这祥系统会目动 使用默认Flunn6「来运行你的代码。 |
二、 各个参数的执行顺序
-
一个JUnit4的单元测试用例执行顺序为:
@BeforeClass -> @Before -> @Test -> @After -> @AfterClass;
-
每一个测试方法的调用顺序为:
@Before -> @Test -> @After;
三、Springboot 单元测试
-
依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> -
Controller 测试
@RunWith(SpringRunner.class) //ItodoApplication springboot的启动类 @SpringBootTest(classes = IApplication.class) @AutoConfigureMockMvc public class ApplicationTests { @Autowired private MockMvc mvc; // 注入Spring容器 @Autowired private WebApplicationContext wac; @Before public void setupMockMvc(){ // 初始化MockMvc对象 mvc = MockMvcBuilders.webAppContextSetup(wac).build(); } @Test(timeout = 100000) public void testUserController() throws Exception { //ObjectMapper 是一个可以重复使用的对象 String exposeHeaders = "access-control-expose-headers"; String allowMethods = "Access-Control-Allow-Methods"; String allowHeaders = "Access-Control-Allow-Headers"; ObjectMapper mapper = new ObjectMapper(); String jsonString = "{\"openId\":\"oKiWu4iI0wKFxmiE-BLiZ1kud26Q\"}"; //将JSON字符串值转换成 Girl对象里的属性值 WxUserView girl = mapper.readValue(jsonString, WxUserView.class); MvcResult result = mvc.perform( //这里是post请求,如果get,替换即可。 MockMvcRequestBuilders.post("/api/wx/detailUser") .contentType(MediaType.APPLICATION_JSON) .header("authToken","wxs") .header("Origin","chrome-extension://mdbgchaihbacjfjeikflfbelidihhmfn") .header(exposeHeaders,"111") .header(allowHeaders,"222") .header(allowMethods,"3333333333") //post请求传参数 .content(mapper.writeValueAsString(girl)) //get请求,传参数用这个 //.param(); .accept(MediaType.APPLICATION_JSON) //断言返回结果是json ) .andExpect(MockMvcResultMatchers.status().isOk()) .andReturn(); MockHttpServletResponse response = result.getResponse(); //拿到请求返回码 int status = response.getStatus(); //拿到结果 String contentAsString = response.getContentAsString(); System.out.println(result); } } -
Service 测试
@RunWith(SpringRunner.class) @SpringBootTest(classes =IApplication.class) public class ServiceTest { @Autowired private WxUserServiceImpl wxUserService; @Test public void usertest(){ WxUser wxUser = wxUserService.getWxUserByOpenId("oKiWu4iI0wKFxmiE-BLiZ1kud26Q"); } }
四、@MockBean 和 @SpyBean
- 在写测试时,对于一些应用的外部依赖需要进行一些Mock 处理,比如:Redis 等;对于这些外部依赖,统一在配置层完成 Mock;
- @MockBean:mock的是本地的代码(自己写的代码),对于储存在库中并且是以 Bean 的形式装配到代码中的类无能为力;而且会导致spirngboot多次重启,因为会导致applicationContext的缓存失效。
- @SpyBean:会监听一个Bean 中某些特定的方法,并在调用这些方法时给出指定的映射。
五、@Profile(value = “dev”)
- 这个注解,注解到类上,用于在不同的环境使用
本文详细介绍了JUnit的基本参数及执行顺序,深入探讨了如何在SpringBoot项目中进行单元测试,包括Controller和Service的测试方法,以及@MockBean和@SpyBean的使用技巧。
1855

被折叠的 条评论
为什么被折叠?



