0

0

JUnit、4、5、木星、复古

betcha

betcha

发布时间:2024-03-21 16:23:00

|

1327人浏览过

|

来源于DZone

原创

JUnit 5 的发布简化了将此库集成到项目中,因为无需从 JUnit 4 迁移。然而,在一个同时使用 JUnit 5 和 4 的大型项目中,这种共存可能会带来混淆和维护困难。为了解决这个问题,本文建议采取以下步骤:告知团队 JUnit 5 的新特性,鼓励使用 JUnit 5 编写新测试,并在删除 JUnit 4 时遵循童子军规则。此外,本文探讨了 JUnit 5 中的显著更改,包括注释、方法和测试配置的更新,以及新的 @ParameterizedTest 注释。最后,文章强调了排除依赖项、创建配置类和使用 OpenRewrite 自动重构源代码的重要性,以帮助迁移到 JUnit 5 并保持项目最新。

JUnit、4、5、木星、复古

JUnit 5发布后,很多开发人员只是将这个很棒的新库添加到他们的项目中,因为与其他版本不同,在这个新版本中,不需要从 JUnit 4 迁移到 5,只需包含新库即可在您的项目中,通过 JUnit 5 的所有引擎,您可以使用 JUnit 5 进行新测试,而使用 JUnit 4 或 3 的旧测试将继续运行,不会出现问题。 

但是,在一个大项目中,一个 10 年前构建的项目,两个版本的 JUnit 并行运行,会发生什么呢?

新的开发人员已经开始参与该项目,其中一些有 JUnit 经验,另一些则没有。新测试是使用 JUnit 5 创建的,新测试是使用 JUnit 4 创建的,在某些时候,开发人员在不知情的情况下,当他们在已创建的 JUnit 5 测试中创建新场景时,他们只包含 JUnit 4 注释,并且测试变成了混合体,一些@Test是 JUnit 4,一些@Test是 JUnit 5,而且每天都更难删除 JUnit 4 库。  

那么,如何解决这个问题呢?首先,您需要向您的团队展示什么来自 JUnit 5,什么来自 JUnit 4,以便使用 JUnit 5 而不是 JUnit 4 创建新测试。之后,无论何时,都需要遵循 Boy Scout 规则他们通过了 JUnit 4 测试,他们必须迁移到 JUnit 5。

让我们看看 JUnit 5 中发布的主要更改。一切都从名称开始,在 JUnit 5 中,您看不到名为 org.junit5 的包,而是看到 org.junit.jupiter。总而言之,你看到的所有东西都带有“Jupiter”,这意味着来自 JUnit 5。他们之所以选择这个名字,是因为 Jupiter 以“JU”开头,是距离太阳第五颗行星。

另一个变化是关于@Test,这个注释被移动到一个新的包:org.junit.jupiter.api,现在不再使用像“expected”或“timeout”这样的属性,而是使用扩展。例如,对于超时,现在您有一个注释: @Timeout(value = 100, unit = TimeUnit.MILLISECONDS)。另一个变化是测试方法和类都不需要公开。

@Before现在,您必须使用and ,而不是@After在测试配置中使用@BeforeEachand @AfterEach,并且您还拥有@BeforeAlland @AfterAll。 

要忽略测试,现在您必须使用@Disable而不是@Ignore. 

JUnit 5 中发布的一个好消息是注释@ParameterizedTest,它可以使用不同的参数多次运行一个测试。例如,如果您想要测试创建某个对象的方法,并且想要验证字段是否填写正确,您只需执行以下操作:

ecshop
ecshop

本版本全面兼容php5.6+,并且修复了许多官方程序的低级代码bug。在apache 2.4.17+php5.6.15环境下测试通过,人格保证无毒无木马,仅仅是一名ecshop热爱者心血来潮之作。ecshop编译更新日志:1、加入最新官方补丁。2、修改数据库连接底层为mysqli, 现在完美无缺了。3、再次对所有代码进行细节修复。4、adminers更新至1.1.2, 在线管理数据库的神器。5、测

下载
@ParameterizedTest
@MethodSource("getInvalidSources")
void shouldCheckInvalidFields(String name, String job, String expectedMessage) {
Throwable exception = catchThrowable(() -> new Client(name, job));
  
  assertThat(exception).isInstanceOf(IllegalArgumentException.class)
      .hasMessageContaining(expectedMessage);
}
static Stream getInvalidSources() {
return Stream.of(Arguments.arguments("Jean Donato", "", "Job is empty"),
                     Arguments.arguments("", "Dev", "Name is empty"));
}

JUnit 5 中有很多不错的功能,我建议您查看 JUnit 5用户指南,以分析哪些功能对您的项目有用。

现在所有开发人员都知道 JUnit 5 中发生了哪些更改,您可以开始从项目中删除 JUnit 4 的过程了。因此,如果您在 2024 年仍在使用 JUnit 4,并且您的项目是一个大项目,那么您可能会有一些使用 JUnit 4 的依赖项。我建议您分析您的库以检查其中某些库是否正在使用 JUnit 4。

在下图中,我使用 IntelliJ 的依赖关系分析器。

依赖性分析器

正如您所看到的,jersey-test 使用的是 JUnit 4,也就是说,即使我从项目中删除 JUnit 4,JUnit 4 仍然可以使用,因为 Jersey. 更简单的方法是将 jersey 升级到 2.35,因为 JUnit 5 是在 jersey-test 2.35 中引入的,但我无法更新jersey-test 框架,因为其他库会在我的项目中中断。那么,在这种情况下,我能做什么呢?

我可以通过 Maven 的依赖排除从 Jersey 中排除 JUnit(如下图所示)。这样就不再使用 JUnit 4,而是使用我们的 JUnit 5。

JUnit、4、5、木星、复古

当你运行一些使用Jersey的测试时,它们不会被加载,因为Jersey中有使用JUnit 4注释的方法,setUpand tearDown,using@Before和@After。为了解决这个问题,您可以创建一个“配置类”,其扩展JerseyTest实现setUpandtearDown并@BeforeEach调用@AfterEachand 。super.setUp()super.TearDown()

public class JerseyConfigToJUnit5 extends JerseyTest {
  @BeforeEach
  public void setUp() throws Exception {
  super.setUp();
  }
  
  @AfterEach
  public void tearDown() throws Exception {
  super.tearDown();
  }
}

因此,如果您已经检查了您的库并且没有人对 JUnit 4 有更多依赖,那么您终于可以将所有测试迁移到 JUnit 5,对于此过程,有一个很好的工具可以帮助您节省大量工作,那就是OpenRewrite,一个源代码的自动重构生态系统,它们会将您所有的旧包、旧注释和所有内容更改为新包。

就是这样,伙计们,现在您和您的队友可以享受 JUnit 5 并放松心情,因为知道将使用 JUnit 5 创建新测试,并且该项目不会成为弗兰肯斯坦。所以,记住,保持你的项目是最新的,因为如果你忘记了你的库,每一天都会更难更新,总是使用规范,以及遵循规范的框架,并且在你的代码中有一个好的设计,这允许您随设施改变和移动。

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Java Maven专题
Java Maven专题

本专题聚焦 Java 主流构建工具 Maven 的学习与应用,系统讲解项目结构、依赖管理、插件使用、生命周期与多模块项目配置。通过企业管理系统、Web 应用与微服务项目实战,帮助学员全面掌握 Maven 在 Java 项目构建与团队协作中的核心技能。

0

2025.09.15

软件测试常用工具
软件测试常用工具

软件测试常用工具有Selenium、JUnit、Appium、JMeter、LoadRunner、Postman、TestNG、LoadUI、SoapUI、Cucumber和Robot Framework等等。测试人员可以根据具体的测试需求和技术栈选择适合的工具,提高测试效率和准确性 。

436

2023.10.13

java测试工具有哪些
java测试工具有哪些

java测试工具有JUnit、TestNG、Mockito、Selenium、Apache JMeter和Cucumber。php还给大家带来了java有关的教程,欢迎大家前来学习阅读,希望对大家能有所帮助。

298

2023.10.23

Java 单元测试
Java 单元测试

本专题聚焦 Java 在软件测试与持续集成流程中的实战应用,系统讲解 JUnit 单元测试框架、Mock 数据、集成测试、代码覆盖率分析、Maven 测试配置、CI/CD 流水线搭建(Jenkins、GitHub Actions)等关键内容。通过实战案例(如企业级项目自动化测试、持续交付流程搭建),帮助学习者掌握 Java 项目质量保障与自动化交付的完整体系。

19

2025.10.24

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

43

2026.01.16

全民K歌得高分教程大全
全民K歌得高分教程大全

本专题整合了全民K歌得高分技巧汇总,阅读专题下面的文章了解更多详细内容。

84

2026.01.16

C++ 单元测试与代码质量保障
C++ 单元测试与代码质量保障

本专题系统讲解 C++ 在单元测试与代码质量保障方面的实战方法,包括测试驱动开发理念、Google Test/Google Mock 的使用、测试用例设计、边界条件验证、持续集成中的自动化测试流程,以及常见代码质量问题的发现与修复。通过工程化示例,帮助开发者建立 可测试、可维护、高质量的 C++ 项目体系。

24

2026.01.16

java数据库连接教程大全
java数据库连接教程大全

本专题整合了java数据库连接相关教程,阅读专题下面的文章了解更多详细内容。

35

2026.01.15

Java音频处理教程汇总
Java音频处理教程汇总

本专题整合了java音频处理教程大全,阅读专题下面的文章了解更多详细内容。

16

2026.01.15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

相关下载

更多

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号