美文网首页
Spring Boot 单元测试

Spring Boot 单元测试

作者: wesker8080 | 来源:发表于2018-08-08 19:49 被阅读0次

    Spring Boot 提供了一些实用程序和注解,用来帮我们测试应用程序。测试由两个模块支持——spring-boot-test包含了核心项目,而spring-boot-test-autoconfigure支持自动配置测试。

    使用

    <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
    

    例子

    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class SpringbootApplicationTests {
    
        @Autowired
        DeviceService deviceService; //要测试的service
    
        @BeforeClass
        public static void classBefore() {
            System.out.println("在每个类加载之前执行");
        }
    
        @AfterClass
        public static void classAfter() {
            System.out.println("在每个类加载之后执行");
        }
    
        @Before
        public void before() {
            System.out.println("在每个测试方法之前执行");
        }
    
        @After
        public void after() {
            System.out.println("在每个测试方法之后执行");
        }
       /**
         * 测试service
         */
        @Autowired
        UserService userService;
        @Test
        //事务回滚
        @Transactional
        public void updateLoginTime() {
            int i = userService.updateLoginTime(1);
            Assert.assertEquals(1, i);
        }
    
    
    
        private MockMvc mvc;
        private MockMvc loginMvc;
    
        @Before
      public void setUp() throws Exception {
            //初始化
            mvc = MockMvcBuilders.standaloneSetup(new CentralMonitorController()).build();
            loginMvc = MockMvcBuilders.standaloneSetup(new LoginController()).build();
        }
    
        /**
         * 测试controller调用 这里只测试url调用,GET
         * @throws Exception
         */
        @Test
        public void list() throws Exception {
            String url = "/central/wesker/group/list";
            MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.get(url).accept(MediaType.APPLICATION_JSON)).andReturn();
            int status = mvcResult.getResponse().getStatus();
            Assert.assertEquals(200, status);
            String content = mvcResult.getResponse().getContentAsString();
            System.out.println("content : " + content);
        }
    
        /**
         * 测试controller调用,POST
         * @throws Exception
         */
        @Test
        public void login() throws Exception {
            Map<String,String> user = new HashMap<>(3);
            user.put("admin","wesker");
            user.put("pwd","123");
            String url = "/central/login";
            MvcResult mvcResult = loginMvc.perform(MockMvcRequestBuilders.post(url)
                    .content(JSON.toJSONString(user))
                    .contentType(MediaType.APPLICATION_JSON))
                    .andReturn();
            int status = mvcResult.getResponse().getStatus();
            Assert.assertEquals(200, status);
            String content = mvcResult.getResponse().getContentAsString();
            System.out.println(content);
        }
    

    @RunWith 是JUnit标准和一个注解,用来告诉JUnit单元测试框架不要使用内置的方式进行单元测试,而应使用 RunWith 指明的类来提供单元测试,所有的 Spring 单元测试总是使用SpringRunner.class

    @SpringBootTest 用于 Spring Boot 应用测试, 它默认会根据包名逐级往上找,一直找到 Spring Boot 主程序,也就是通过类注解是否包含@SpringBootApplication来判断是否是主程序,并在单元测试的时候启动该类来创建Spring上下文环境。

    @Transactional 是用于事务回滚的注解。因为此处测试的是往数据库里添加数据,我们希望Service测试完毕后,数据能自动回滚。但nosql一般不支持回滚

    单元测试中不准使用System.out进行人肉验证,必须使用assert进行验证

    相关文章

      网友评论

          本文标题:Spring Boot 单元测试

          本文链接:https://www.haomeiwen.com/subject/whbxbftx.html