测试
在编写单元测试的时候 Spring不需要介入(随便一提:单元测试难道是用方法就能测试??)
但是在集成测试要用到Spring 就像下面一个例子 如果生产应用程序使用了Spring来配置并组装组件 那么测试就需要用它来配置并组装那些组件
Spring的SpringJUnit4ClassRunner可以在基于JUnit的应用程序测试里加载Spring应用程序上下文
Springboot集成测试
要想加载完整的Spring boot Springboot应用程序最终是由
SpringApplication加载的 它可以显示加载 在这里也可以使用SpringBootSercletInitializer
SpringApplication不仅加载应用程序上下文 还会开启日志 加载外部属性(application.properties)以及其他SpringBoot特性
如果我们要测试Mybatis中的某个mapper
按照常规的做法 要获取sqlsession 但是springboot将配置文件给"省略"了
常规方法就不好获取了
可以使用Springboot的测试类
注意:
该写法适用于2.2以下的版本
博主亲测2.1.8有效-
注意测试类的 包名 要和主启动类一致
@RunWith(SpringRunner.class)
@SpringBootTest
public class Chapter16ApplicationTests{
@Test
public void contextLoads(){
}
}
注解@RunWith载入的类SpringRunner是Spring结合Junit的运行器
所以进行JUint测试 @SpringBootTest是可以配置Spring Boot的相关功能
public class Chapter16ApplicationTests{
//注入用户服务类
@Autowired
private UserService userService=null;
@Test
public void contextLoads(){
User user=userService.getUser();
//....
//使用断言判断用户信息是否为空
Assert.assertNotNull(user);
}
}
如果包名一致还是错误
以下写法省略了@RunWith(SpringRunner.class)也能成功注入 是因为博主使用的Spring BOOT是2.2.4
@SpringBootTest
class DemoApplicationTests {
/**
* 将mysql中的date返回java中的date
*/
@Autowired
ArticleMapper articleMapper;
@Test
void contextLoads() {
System.out.println(articleMapper);
List<String> list=articleMapper.getCategories((long) 7);
System.out.println(
Arrays.toString(list.toArray())
);
}
}
//上诉代码执行完毕
//注入的内容永远是空
//articleMapper为空
理论上来说 低于2.2.x版本的应该不支持集成测试