Damon4V
V2EX  ›  Java

Spring Boot 的单元测试

  •  
  •   Damon4V · Oct 29, 2018 · 5651 views
    This topic created in 2929 days ago, the information mentioned may be changed or developed.
    Spring Boot 的单元测试,打包成 jar/war 后,怎么去使用 shell 启动里面的单元测试;
    31 replies  •  2018-11-11 15:14:08 +08:00
    xiaoxinshiwo
    xiaoxinshiwo
    Oct 29, 2018
    1
    不是使用 maven 命令吗?
    vimsucks
    vimsucks
    Oct 29, 2018 via Android
    2
    不是单测跑过了才打包的吗?
    x66
    x66
    Oct 29, 2018 via iPhone
    3
    单元测试过了才打包,打好包了就不需要再执行单元测试了
    xhinliang
    xhinliang
    Oct 29, 2018
    4
    正解
    Damon4V
    Damon4V
    OP
    Oct 29, 2018
    5
    @x66
    @vimsucks
    @xiaoxinshiwo

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

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