当前位置: 首页 > 知识库问答 >
问题:

在运行时访问JUnit版本

惠野
2023-03-14

有没有一种方法可以在运行时访问JUnit5版本?

例如。

    ...
    System.out.printf( "JUnit: %s\n",  junit.runner.Version.id() );
    ...

在JUnit4中工作得很好。

我正在寻找JUnit5的“对应物”

谢谢:-)

共有2个答案

花高爽
2023-03-14

谢谢你的回答,但我还是有问题。例如。我无法访问“.getVersion()”

无论如何

...
import java.lang.module.ModuleDescriptor;
import java.lang.module.ModuleDescriptor.Version;
import java.util.Optional;

import org.junit.jupiter.api.Test;
import org.junit.platform.runner.JUnitPlatform;
...
String getJupiterVersionFromModuleDescriptor(){
    final Class<Test> clazz = org.junit.jupiter.api.Test.class;
    final Module module = clazz.getModule();
    final ModuleDescriptor moduleDescriptor = module.getDescriptor();
    final Optional<Version> optionalVersion = moduleDescriptor.version();
    final Version version = optionalVersion.get();
    return version.toString();
}

String String getPlatformVersionFromModuleDescriptor(){
    final Class<JUnitPlatform> clazz = org.junit.platform.runner.JUnitPlatform.class;
    final Module module = clazz.getModule();
    final ModuleDescriptor moduleDescriptor = module.getDescriptor();
    final Optional<Version> optionalVersion = moduleDescriptor.version();
    final Version version = optionalVersion.get();
    return version.toString();
}

String getJupiterVersionFromManifest(){
    final Class<Test> clazz = org.junit.jupiter.api.Test.class;
    final Package pakage = clazz.getPackage();
    final String version = pakage.getImplementationVersion();
    return version;
}

String getPlatformVersionFromManifest(){
    final Class<JUnitPlatform> clazz = org.junit.platform.runner.JUnitPlatform.class;
    final Package pakage = clazz.getPackage();
    final String version = pakage.getImplementationVersion();
    return version;
}// delivers null in my case - getPlatformVersionFromModuleDescriptor() reports 1.5.1 on my machine

当然还有:

org.junit.jupiter.api.Test.class.getModule().getDescriptor().version()
org.junit.platform.runner.JUnitPlatform.class.getModule().getDescriptor().version()
org.junit.jupiter.api.Test.class.getPackage().getImplementationVersion()
org.junit.platform.runner.JUnitPlatform.class.getPackage().getImplementationVersion()

也管用。

当前我正在使用:

String getJupiterVersion(){
    final Class<Test> testClass = org.junit.jupiter.api.Test.class;
    final Optional<Version> optionalVersion = testClass.getModule().getDescriptor().version();
    return optionalVersion.isPresent() ? optionalVersion.get().toString() : testClass.getPackage().getImplementationVersion();
}

String getPlatformVersion(){
    final Class<JUnitPlatform> jUnitPlatformClass = org.junit.platform.runner.JUnitPlatform.class;
    final Optional<Version> optionalVersion = jUnitPlatformClass.getModule().getDescriptor().version();
    return optionalVersion.isPresent() ? optionalVersion.get().toString() : jUnitPlatformClass.getPackage().getImplementationVersion();
}

此外:在运行时获得jar版本可能会有帮助。

无论如何,我仍然有问题访问复古版本。例如。org.junit.vintage.engine.vintageTestEngine不可访问???

最近在一些运行JUnit 5.4getDescriptor()的机器上。例如org.junit.jupiter.api.test.class.GetModule().GetDescriptor()传递了空值。我希望有一种方法来识别在任何JUnit5安装上运行的JUnit版本。

通奕
2023-03-14

没有单一的“JUnit5”版本号。

他们有三个人。它们列在junit.org上:

这三个组的所有工件都包含打包的版本信息

a)进入其模块描述符,并且

b)放入清单文件。

以木星为例,你可以使用

a)org.junit.jupiter.api.test.class.GetModule().GetDescriptor().GetVersion()

或b)org.junit.jupiter.api.test.class.GetPackage().GetImplementationVersion()

在运行时访问Jupiter的版本信息。

 类似资料:
  • 我有个测试: 当我删除子句并添加一个包含的依赖项(作为库)时,它可以工作: 当我添加它们时(中的Maven依赖项和),IDEA中的编译失败,出现以下消息: 但是Maven build仍然成功! 测试项目可在https://github.com/rpuch/test-resource-jdk9获得

  • 问题内容: 我有一个测试: 它尝试访问。在Java 8中,它起作用了,但是在Java 9中(我在使用Oracle JDK 9),它失败了。从JDK是默认不可用在Java中9。 我正在尝试使用模块描述符访问它: 在这里,我专门请求访问模块(包含)。但是测试仍然失败。 当我删除该子句并添加包含的依赖项(作为库)时,它会起作用: 当我(在Maven的依赖性增加他们两个和),汇编IDEA失败,出现以下消息

  • 我正在用docker-compose测试我的应用程序,其中包含DynamoDB作为内部容器。docker-compose文件如下: 在构建代码时,我得到以下错误:

  • 当我运行junit测试时,控制台打印此异常: 基本测试对象如下 而 JUnit 方法就像这样: 我的项目是JavaEE项目,使用maven管理lib,使用spring-manage-beans。 我的开发环境是: Mac OS X Yosetime 10.10.4 EclipseJavaEE IDE for Web Developers(版本:Mars Release(4.5.0)) Maven插

  • 问题内容: 我需要解决JDK 1.5中的Java错误,该错误已在1.6中修复。我正在使用以下条件: 这对其他JVM有用吗?有更好的方法来检查吗? 问题答案: 是每个JVM中都存在的系统属性。有两种可能的格式: Java的8或降低:1.6.0_23,1.7.0,1.7.0_80,1.8.0_211 Java的9或更高:9.0.1,11.0.4,12,12.0.1 这是提取主要版本的技巧:如果它是版本

  • 问题内容: 我想知道是否有可能在运行时检索该类来自的jar的版本号? 我知道可以找到该类来自的jar: 但是版本呢? (假设其不在文件名中:) 问题答案: