开发时java项目启动时需要连mysql等,有没有什么工具可以mock连接使得启动顺利不报错?

发布于 2022-09-11 22:54:26 字数 150 浏览 35 评论 0

开发时java项目启动时需要连mysql,redis,mongo,rabbitmq等,本机不想安装这么多东西,不在公司时vpn连接测试机器连其上面的mysql, redis, mongo, rabbitmq,有时候有点麻烦,有没有什么工具可以mocker到这些的连接使得启动顺利不报错?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

起风了 2022-09-18 22:54:26

如果是非单元测试

mock 一个数据库连接不难,实际上只要 mock 一个 DataSource 对象,然后根据项目实际初始化方式放进去就可以了,而这个对象实际连接到本地的任意数据库即可。下面的例子使用 mybatis 和 H2 数据库:

DataSource dataSource = new org.apache.ibatis.datasource.pooled.PooledDataSource(
  "org.h2.Driver","jdbc:h2:mem:",null,null
);

上面的例子创建的是一个空的数据库,所以如果启动过程中有数据库操作,肯定会失败。因此要么把这些操作从初始化过程中移走,要么在 mock 数据库中创建同样的表等等,让初始化过程顺利完成。

如果是单元测试

在 Spring Boot 的单元测试中,可以用 @MockBean 来隔离很多东西,比如项目中用了一个 Jedis 对象,但是某个单元测试并不需要连接 Redis 服务,那么可以:

@SpringBootTest
@RunWith(SpringRunner.class)
public class ATest {

  @MockBean
  private Jedis jedis;  // 1

  @Test
  public void test1() {
    ...
  }
}

// 1 这里就是告诉 Spring Boot 创建一个模拟的 Jedis 对象,它不会连接任何服务,这样就省去了下面的麻烦:1) 在本地运行一个真正的 Redis 服务;2)离线开发时修改项目配置指向本地的 Redis 服务,集成测试时又要改回去。

野味少女 2022-09-18 22:54:26

我目前所在公司的环境分为dev,test,sit,pre,prd。不管那个环境都自己完整且独立的的mysql,redis,mq等等,就不存在你说的这个问题了。目前应该没有这种工具吧,反正我是没有见过,这种全能的工具实现起来太难了。

第七度阳光i 2022-09-18 22:54:26

如果真的要用:

  1. 装这些东西并不麻烦,但是要注意不要乱动配置,以及版本要弄对,否则之后的版本变更/重装会有有问题
  2. 如果担心装不好,用docker跑

如果真的不用:

  1. 抽接口
  2. 写一个空实现/虚拟实现,用 profile 切换
那些过往 2022-09-18 22:54:26
  1. 如果是单测,有N种mock的方法
  2. 只是为了启动,那就把相关依赖删了或者在代码层手动改动呗,你肯定是带着一定目的去边mock服务边启应用的,调试结果达到你那个目的就好了,如果是SpringBoot应用就exclude 相关的自动装配;
  3. 完全mock这个服务的工具,就算github上有,你的学习成本还不如启一下上述应用,docker容器跑一下不需要很多的时间。

(PS:这位老哥我已经面熟你了^_^)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文