Spring Boot 的单元测试 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Damon4V
V2EX    Java

Spring Boot 的单元测试

  •  
  •   Damon4V 2018-10-29 17:32:42 +08:00 4900 次点击
    这是一个创建于 2538 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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     Solana     900 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 20:52 PVG 04:52 LAX 13:52 JFK 16:52
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86