spring boot test MockBean
2024-10-20 20:50:58
使用spring boot , MockBean
1 @RunWith(SpringRunner.class)
2 @SpringBootTest(classes = Application.class)
3 public class DalListTest {
4
5 @MockBean
6 private XxxService xxxService;
7
8 }
classes指定主程序的入口
@MockBean可以在代替实际的Bean, 用来解决一些初始化问题, 比如用例启动不了。不需要在测试类中使用@Configuration, @Bean
默认查找bean的package和主程序入口package相同
mock maven依赖
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>${mockito.version}</version>
</dependency>
@SpringBootTest是用在集成测试阶段的,单元测试中不要用这个, 而且单元测试的代码需要和集成测试的代码分开
TDD实践中是先做单元测试,然后实现代码, 再做集成测试 单元测试 是先建立验证目标, 然后实现具体代码。
单元测试时 只需要@RunWith(SpringRunner.class),不要@SpringBootTest
比如只验证controller时, service层的bean是mock打桩, 配合@WebMvcTest就够了
只验证service时, 使用@RunasJunit就行, mock mapper bean
只验证orm时, 使用@JdbcTest,要导入MybatisAutoConfig, 默认不会自动加载autoConfig类。
此时也是要初始化DataSource, sqlSessionFactory ..., 只不过@JdbcTest帮我们初始化了,不用再手动new相关对象
@JdbcTest会自动使用h2数据库, 如果想使用xml中的jdbc路径,需要修改配置spring.test.database.replace=none, springboot1,2版本稍有区别
@ActiveProfiles("test,local")
@RunWith(SpringRunner.class)
@ImportAutoConfiguration(classes = {MybatisPlusAutoConfiguration.class, JdbcTemplateAutoConfiguration.class})
@JdbcTest
@WebAppConfiguration
public class ApiAddressDaoTest { @Autowired
private ApiAddressDao apiAddressDao; @Autowired
private JdbcTemplate jdbcTemplate; @Test
public void test_queryList() { // 打桩 如果使用entityManager 会自动创建表
jdbcTemplate.execute("create table ns_address (id int null, user_id int)");
jdbcTemplate.execute("insert into ns_address values(11, 156)"); // 验证
List<AddressVo> addressVos = apiAddressDao.listAddress(156L);
assertThat(addressVos).isNotEmpty();
} }
https://www.baeldung.com/spring-boot-testing
https://github.com/mbhave/tdd-with-spring-boot @TestPropertySource(xxx.properties) 会覆盖application.properties中的配置
单元测试的优点和价值:
1. 基准测试, 有对比, 可验证,建立修改的信心
2. 文档作用
3. 可重用 速度快 不用每次都找前端要参数
最新文章
- PHP的变量和常量
- [解决方案] pythonchallenge level 1
- PHP导出大量数据到excel表格
- vim : 依赖: vim-common (= 2:7.3.429-2ubuntu2.1) 但是
- C#微信公众号开发系列教程五(接收事件推送与消息排重)
- x-code快捷键
- tomcat war包部署
- 在C语言中,double、long、unsigned、int、char类型数据所占字节数
- time.h
- CSS3 中FLEX快速实现BorderLayout布局
- 终端的CTRL+S 解说
- linux通配符与正则表达式
- 要学好JAVA要注意些什么?
- Android官方技术文档翻译——清单合并
- 一个ping大包不通问题的解决过程
- [Oracle]GoldenGate官方文档
- BZOJ2729 HNOI2012排队(组合数学+高精度)
- 【转】java方法参数传递方式--按值传递、引用传递
- pycharm如何显示工具栏
- eclipse生成ant build.xml打war包
热门文章
- 系列文章--打造自己的MVC框架
- java中toString() 、(String)、String.valueOf的区别
- orcal数据库得连接必须用localhost,url中不要用127.0.0.1,不然无法连接
- JSP介绍(3)---JSP表单处理
- Javax ws 01
- 利用包管理器安装Node.JS
- hbase->;Mapreduce->;hbase
- R语言系列:数据的基本运算
- 阶段3-团队合作\项目-网络安全传输系统\sprint1-传输子系统设计\第3课-加密传输优化
- php获取request_uri