springboot实战原理分析笔记(十七)-spring boot测试步骤

spring boot测试步骤
1.直接在测试类上面加2个注解

    @RunWith(SpringRunner.class)
    @SpringBootTest(classes = UserDao.class)

只在测试环境下有效的 @TestConfiguration

springboot会优先加载测试环境的配置文件,测试环境没有才会加载正式环境
设置配置还可以通过一下方法:
1.

	@SpringBootTest(classes = App.class, properties = {"springboot.version=1.0.0"})
		@Autowired
        private ConfigurableApplicationContext configurableApplicationContext;
    
        @org.junit.Before
        public void before(){
            EnvironmentTestUtils.addEnvironment(configurableApplicationContext, "aaa=aaaw");
        }

//只有接口的没有实现方法,可以通过一下方法预测

	@RunWith(SpringRunner.class)
    public class UserMapperTest {
    
        @MockBean
        private UserMapper userMapper;
    
    
        @Before
        public void init(){
            //通过这个可以预测
            BDDMockito.given(userMapper.createUser("name")).willReturn(Integer.valueOf(1));
            BDDMockito.given(userMapper.createUser("")).willReturn(Integer.valueOf(0));
            BDDMockito.given(userMapper.createUser(null)).willThrow(new NullPointerException());
        }
    
        @Test(expected = NullPointerException.class)
        public void testEnv(){
            Assert.assertEquals( Integer.valueOf(1),userMapper.createUser("name"));
            Assert.assertEquals( Integer.valueOf(0),userMapper.createUser(""));
            Assert.assertEquals( new NullPointerException(),userMapper.createUser(null));
        }
    }

测试controller: TestRestTemplate 需要运行在web环境中
第一种方法:

	@RunWith(SpringRunner.class)
    @SpringBootTest(classes = App.class, webEnvironment=SpringBootTest.WebEnvironment.DEFINED_PORT)
    public class BookControllerTest { 
    
    
        @Autowired
        private TestRestTemplate testRestTemplate;
        @Test
        public void testHome() throws Exception {
            String forObject = testRestTemplate.getForObject("/book/home", String.class);
            Assert.assertEquals("book home", forObject);
        }
    
    
        @Test
        public void testShow() throws Exception {
            String forObject = testRestTemplate.getForObject("/book/show?id=1", String.class);
            Assert.assertEquals("book1", forObject);
        }
    } 

@WebMvcTest(controllers = BookController.class) 不需要运行在web环境下,但是需要制定controllers,表示需要测试那些controllers
这种方式只测试controller,controller里面的一些依赖,需要自己去mock
@WebMvcTest不加载整个spring容器
第二种方法:

 	@RunWith(SpringRunner.class)
    @WebMvcTest(controllers = BookController.class )
    @ContextConfiguration(classes = App.class)
    public class BookControllerTest2 {
    
        @Autowired
        private MockMvc mvc;
    
        @Test
        public void testHome() throws Exception {
            mvc.perform(MockMvcRequestBuilders.get("/book/home")).andExpect(MockMvcResultMatchers.status().isOk());
            mvc.perform(MockMvcRequestBuilders.get("/book/home")).andExpect(MockMvcResultMatchers.status().isOk()).andExpect(MockMvcResultMatchers.content().string("book home"));    }
    
    
        @Test
        public void testShow() throws Exception {
            mvc.perform(MockMvcRequestBuilders.get("/book/show").param("id","123")).andExpect(MockMvcResultMatchers.status().isOk()).andExpect(MockMvcResultMatchers.content().string("book123"));
    
        }
    } 

@WebMvcTest不能和@SpringBootTest一起使用,需要加载整个spring容器,使用下面的方式
如果需要使用MockMvc对象,加上@AutoConfigureMockMvc注解

    @RunWith(SpringRunner.class)
    @SpringBootTest(classes = App.class)
    @AutoConfigureMockMvc
    public class BookControllerTest2 {
    
        @Autowired
        private MockMvc mvc;
    
        @Test
        public void testHome() throws Exception {
            mvc.perform(MockMvcRequestBuilders.get("/book/home")).andExpect(MockMvcResultMatchers.status().isOk());
            mvc.perform(MockMvcRequestBuilders.get("/book/home")).andExpect(MockMvcResultMatchers.status().isOk()).andExpect(MockMvcResultMatchers.content().string("book home"));    }
    
    
        @Test
        public void testShow() throws Exception {
            mvc.perform(MockMvcRequestBuilders.get("/book/show").param("id","123")).andExpect(MockMvcResultMatchers.status().isOk()).andExpect(MockMvcResultMatchers.content().string("book123"));
    
        }
    } 	
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值