V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Damon4V
V2EX  ›  Java

Spring Boot 的单元测试

  •  
  •   Damon4V · 2018-10-29 17:32:42 +08:00 · 4343 次点击
    这是一个创建于 1998 天前的主题,其中的信息可能已经有所发展或是发生改变。
    Spring Boot 的单元测试,打包成 jar/war 后,怎么去使用 shell 启动里面的单元测试;
    31 条回复    2018-11-11 15:14:08 +08:00
    xiaoxinshiwo
        1
    xiaoxinshiwo  
       2018-10-29 17:42:03 +08:00
    不是使用 maven 命令吗?
    vimsucks
        2
    vimsucks  
       2018-10-29 17:43:05 +08:00 via Android
    不是单测跑过了才打包的吗?
    x66
        3
    x66  
       2018-10-29 17:45:23 +08:00 via iPhone
    单元测试过了才打包,打好包了就不需要再执行单元测试了
    xhinliang
        4
    xhinliang  
       2018-10-29 17:49:06 +08:00
    正解
    Damon4V
        5
    Damon4V  
    OP
       2018-10-29 17:50:48 +08:00
    @x66
    @vimsucks
    @xiaoxinshiwo

    有个需求是这样的:之前做了个定时任务,任务处理一些东西,然后,测试反馈这样很麻烦,需要提供一个 shell 脚本去主动执行任务的处理,各位有什么好的方法,除了修改时间和暴露接口
    Damon4V
        6
    Damon4V  
    OP
       2018-10-29 17:52:48 +08:00
    @xhinliang 有什么好的方法吗? 项目是使用 Spring Boot 架构的
    xiaoxinshiwo
        7
    xiaoxinshiwo  
       2018-10-29 17:53:50 +08:00
    @Damon4V #5 首先 springboot 打包成可执行的 jar 会吧,在入口 main 方法中调用需要定时执行的业务就行。然后 shell 中使用 linux 的 crontab 执行定时任务即可
    Damon4V
        8
    Damon4V  
    OP
       2018-10-29 18:06:23 +08:00
    @xiaoxinshiwo 现在项目是分成好几个 jar 包的,service 层单独一个,dao 层单独,类似这样,这样在其中一个 jar 包里的 main 方法中去调用 service 层接口,会找不到的
    xhinliang
        9
    xhinliang  
       2018-10-29 18:58:29 +08:00
    你这个不是单元测试吧?用 ApplicationRunner 来做行不行?
    或者说你这个是希望主动触发的?
    Damon4V
        11
    Damon4V  
    OP
       2018-10-30 09:27:04 +08:00
    @xhinliang 定时触发是已经做了的,现在是要写个脚本什么的去触发执行 main 函数
    xiaoxinshiwo
        12
    xiaoxinshiwo  
       2018-10-30 09:31:19 +08:00
    @Damon4V #8 java -jar 可以指定执行的 main 方法,不知道你讲的找不到啥意思
    Damon4V
        13
    Damon4V  
    OP
       2018-10-30 09:34:07 +08:00
    @xiaoxinshiwo 那 main 方法里怎么去获取 Bean,注解方式的加载的 Bean
    xiaoxinshiwo
        14
    xiaoxinshiwo  
       2018-10-30 09:38:27 +08:00
    使用 springContext 啊,直接 getBean
    xiaoxinshiwo
        15
    xiaoxinshiwo  
       2018-10-30 09:38:41 +08:00
    @Damon4V #13 使用 springContext 啊,直接 getBean
    Damon4V
        16
    Damon4V  
    OP
       2018-10-30 09:40:06 +08:00
    @xiaoxinshiwo 取回来是 Null 的
    Damon4V
        17
    Damon4V  
    OP
       2018-10-30 09:42:05 +08:00
    @xiaoxinshiwo <dependency>
    <groupId>com.***.***</groupId>
    <artifactId>XXXXX</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    </dependency>

    这个 bean 是在 XXX 项目里的,这样不能找到吧?
    Damon4V
        18
    Damon4V  
    OP
       2018-10-30 09:42:39 +08:00
    @xiaoxinshiwo XXX 是自己的代码,只是分开的
    xiaoxinshiwo
        19
    xiaoxinshiwo  
       2018-10-30 09:44:44 +08:00
    @Damon4V #18 那你在 main 方法里面初始化 spring 容器啊
    xiaoxinshiwo
        20
    xiaoxinshiwo  
       2018-10-30 09:45:38 +08:00
    @Damon4V #16 不然你把 @springBootApplication 放在你自己的 main 里面也能初始化 spring 啊
    Damon4V
        21
    Damon4V  
    OP
       2018-10-30 09:57:06 +08:00
    @xiaoxinshiwo @springBootApplication 是在 dependency 里面,spring boot 结构的也能手动初始化 spring 容器???
    xiaoxinshiwo
        22
    xiaoxinshiwo  
       2018-10-30 10:03:25 +08:00
    @Damon4V #21 跟 Application.java 一样啊。再不济你使用执行时间可配置的定时任务不行吗
    fairyto2
        23
    fairyto2  
       2018-10-30 10:15:39 +08:00 via iPhone   ❤️ 1
    写个 controller,用 curl 执行不就可以了?
    paragon
        24
    paragon  
       2018-10-30 10:23:00 +08:00
    然而单元测试并不会被打包
    ixiaohei
        25
    ixiaohei  
       2018-10-30 10:24:09 +08:00
    单元测试是 mvn 的 test 周期执行的。你都打成 jar 了(已经执行 package 周期),之后的测试应该是功能和集成测试。
    另外你按照 maven 约定写测试代码(在 src/test/java ),不要跳过 test 周期就会跑单测。(单测写的越多花费时间越长,所以建议上 ci )
    liiihhhh
        26
    liiihhhh  
       2018-10-30 10:25:35 +08:00
    xiaoxinshiwo
        27
    xiaoxinshiwo  
       2018-10-30 10:25:43 +08:00
    @fairyto2 #23 这个思路也是挺不错
    Damon4V
        28
    Damon4V  
    OP
       2018-10-30 12:07:49 +08:00
    @liiihhhh 这个能在服务起来后,再去用设置的命令吗?比如,部署完后
    vjnjc
        29
    vjnjc  
       2018-10-30 14:26:06 +08:00
    赞同#25 的方法,其他的还叫单元测试么。。。
    luozic
        30
    luozic  
       2018-10-30 17:03:07 +08:00 via iPhone
    集成测试就叫集成测试。
    jack80342
        31
    jack80342  
       2018-11-11 15:14:08 +08:00
    这是我翻译的 Spring Boot 2.0 的官方文档,可能对你有帮助。https://github.com/jack80342/Spring-Boot-Reference-Guide
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1338 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 23:40 · PVG 07:40 · LAX 16:40 · JFK 19:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.