spring boot(24)-test测试

如果直接用junit去测试一个方法,即使测试成功,这个方法在spring中运行时也可能会有不同的结果,因为spring是一个集成环境,会加载很多东西,从而影响最终结果。本篇将介绍spring boot的集成测试,需要首先理解maven测试

pom.xml

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

spring测试

//Spring集成测试
@RunWith(SpringRunner.class) 	
//Run就是@SpringBootApplication注解的类,从这里加载配置
@SpringBootTest(classes = Run.class) 	
public class HelloTest {

	@Autowired
	MybatisDao mybatisDao;

	@Test
	public void test() {
		Assert.assertEquals("hello world", mybatisDao.test()); 
	}
}
这段代码就是在spring环境中测试mybatisDao.test()的返回值是否是"hello world",只需要理解类上面的两个注解即可。

mvc测试

上面是测试方法代码,而mvc测试则可以模拟浏览器请求url

//自动配置mvc测试环境
@AutoConfigureMockMvc
@RunWith(SpringRunner.class)
@SpringBootTest(classes = Run.class)
public class HelloTest {

	@Autowired
	private MockMvc mockMvc;

	@Test
	public void test() throws UnsupportedEncodingException, Exception {
		//用post方式请求localhost:8080/test,post方法后面紧跟param方法可以传参
		mockMvc.perform(MockMvcRequestBuilders.post("/test"))// .param(name, values)
		//测试响应码是不是200,即请求成功
				.andExpect(MockMvcResultMatchers.status().isOk())
		//测试请求结果是不是"hello world"
				.andExpect(MockMvcResultMatchers.content().string("hello world"));
		//以下代码可以直接得到localhost:8080/test的结果 
		System.out.println(mockMvc.perform(MockMvcRequestBuilders.post("/test"))
				.andReturn().getResponse().getContentAsString());
	}
}

开头多了一个注解,springboot就会自动配置好mvc测试环境,就可以注入MockMvc进行mvc测试。

测试json接口

上面测试的url返回值是一个字符串,如果返回的是json接口,可将test方法换成以下代码,和上面类似。

	//使用jackson将对象序列化为json字符串
	Map map=new HashMap();
	map.put("key", "value");
	ObjectMapper mapper = new ObjectMapper();
	String jsonString = mapper.writeValueAsString(map);
	//将mvc测试中的string方法改成json方法,比对json字符串值是否相等
	mockMvc.perform(MockMvcRequestBuilders.post("/test"))
	    	.andExpect(MockMvcResultMatchers.content().json(jsonString));
string方法是比对字符串。而json方法是比对json的近似值,对格式要求不严格,只要内容一样,其中的符号差别都可以接受。比如json格式中的单引号和双引号,json方法认为他们是一样的。

如果url请求返回的json集很大,而只想测试其中一行结果的一个值,可以先取到请求的json结果,再用jackson反序列化成对象,就可以直接取到某一参数进行比对。

测试回滚

@Transactional在spring boot程序中是事务注解。如果在测试中使用,它的作用是回滚,无论测试成功或失败,都会回滚对数据库操作。以免测试数据影响到正式数据。这个注解放在类上面或方法上面都可以。

surefire测试

spring boot重写了maven的surefire测试插件,修改了规则,如果不理解先看一下maven测试

				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-surefire-plugin</artifactId>
					<configuration>
						<includes>
							<include>**/*Tests.java</include>
							<include>**/*Test.java</include>
						</includes>
						<excludes>
							<exclude>**/Abstract*.java</exclude>
						</excludes>
					</configuration>
				</plugin>

测试场景

并不建议每个功能都写一个测试用例,这样测试效率是很低的。有很多专门的测试工具如soapUI等,都不需要写代码,直接输入url请求就能测试,各种功能都比junit代码测试强大,而且更于管理。不过在有些场景下只能写代码测试,如maven测试中说到的场景等。所以,只有真正需要的时候,才去写junit代码测试,而不必每个功能都去写测试用例,只要达到效果,同等情况下应选择更高效的测试方法。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值