【问题标题】:How to run a test class in a jar file from command line? [closed]如何从命令行在 jar 文件中运行测试类? [关闭]
【发布时间】:2020-11-14 21:11:55
【问题描述】:

我的SpringBoot项目的结构是:

没有主类,我把项目编译成jar文件。

现在我想从命令行的jar 文件中在屏幕截图的最后一行Send1000EmailsIn24hours 中显示的测试类中运行一个名为“testEmailSending”的方法。

我之所以要在jar文件中运行这个测试是因为整个项目只是一个测试,但我认为既然是测试,所以我不应该把代码放在@987654329 @class,相反,将它放在测试中会更好。

我不确定这是否正确。我应该将用于测试的代码放在主类中吗?

【问题讨论】:

  • @D.B.所以命令应该是java -jar CNSClient.jar fully.qualified.package.Send1000EmailsIn24hours 假设我在与jar 文件相同的目录中运行控制台?但是这个命令返回no main manifest attribute, in CNSClient.jar
  • 您为什么要这样做?那是某种集成测试吗...
  • 通常测试代码不会进入您的生产代码 jar。所以你需要做额外的步骤——取决于你使用的构建工具(Maven、Gradle 或其他东西)——这里已经提出了一个类似的问题stackoverflow.com/questions/36047637/…)。我相信值得一看。无论如何,我仍然在努力理解为什么你需要这种方式。当您可以使用构建工具本身 Maven 或 Gradle 自己从命令行运行测试时...

标签: java spring spring-boot junit


【解决方案1】:

正如 Alexei Kovalev 所暗示的那样,您永远不想这样做。
测试代码就是测试代码。好的做法是永远不要将它包含在应用程序中,并且默认情况下 maven/gradle 会尊重这一点。
使用 Spring Boot,建议您在框架提供的工具框架中执行测试和集成测试:使用@SpringBootTest 注释您的测试通过加载弹簧上下文来实现该目标,就像您通过运行 jar 所做的那样。
如果除了这些类型的测试之外,您还需要对 JAR 执行测试,您当然可以这样做。在某种程度上,这可能是有道理的,因为 JAR 可能有一些可以测试的包装差异。但是您应该为此编写一些测试。因为打包完整的 Spring Boot 应用程序是一个缓慢的过程,还因为您无法从 Spring Boot 提供的所有测试工具中受益。 总体思路:

  • 编写未打包在应用程序中并调用组件(通过对 api/控制器的 Web 请求)或检查这些副作用(用于批处理)的集成测试(JUnit 足以作为运行程序)。
  • 将应用程序作为 jar 运行
  • 运行集成测试

【讨论】:

    猜你喜欢
    • 2021-08-17
    • 2013-11-23
    • 2015-05-09
    • 2011-04-09
    • 2014-09-02
    • 2015-05-22
    • 2016-02-03
    • 2017-06-08
    • 1970-01-01
    相关资源
    最近更新 更多