使用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.  可重用  速度快 不用每次都找前端要参数

 

最新文章

  1. PHP的变量和常量
  2. [解决方案] pythonchallenge level 1
  3. PHP导出大量数据到excel表格
  4. vim : 依赖: vim-common (= 2:7.3.429-2ubuntu2.1) 但是
  5. C#微信公众号开发系列教程五(接收事件推送与消息排重)
  6. x-code快捷键
  7. tomcat war包部署
  8. 在C语言中,double、long、unsigned、int、char类型数据所占字节数
  9. time.h
  10. CSS3 中FLEX快速实现BorderLayout布局
  11. 终端的CTRL+S 解说
  12. linux通配符与正则表达式
  13. 要学好JAVA要注意些什么?
  14. Android官方技术文档翻译——清单合并
  15. 一个ping大包不通问题的解决过程
  16. [Oracle]GoldenGate官方文档
  17. BZOJ2729 HNOI2012排队(组合数学+高精度)
  18. 【转】java方法参数传递方式--按值传递、引用传递
  19. pycharm如何显示工具栏
  20. eclipse生成ant build.xml打war包

热门文章

  1. 系列文章--打造自己的MVC框架
  2. java中toString() 、(String)、String.valueOf的区别
  3. orcal数据库得连接必须用localhost,url中不要用127.0.0.1,不然无法连接
  4. JSP介绍(3)---JSP表单处理
  5. Javax ws 01
  6. 利用包管理器安装Node.JS
  7. hbase-&gt;Mapreduce-&gt;hbase
  8. R语言系列:数据的基本运算
  9. 阶段3-团队合作\项目-网络安全传输系统\sprint1-传输子系统设计\第3课-加密传输优化
  10. php获取request_uri