快速将 assertXY 语句从 JUnit4 迁移到 Junit5?

Migrate assertXY Statements from JUnit4 to Junit5 in a fast way?

我们的项目中有数千个使用 JUnit4 构建的单元测试。目前,我们正在迁移到 JUnit5。

但是,assertXY 语句的不同方法签名已从 JUnit 4 更改为 JUnit 5,如果我们以手动方式迁移它们,则需要大量手动工作 and/or 时间。

问题:

JUnit4 中的示例

@Test
public void testCreatePersonCorrect() {
    String name = UUID.randomUUID().toString();
    String title = UUID.randomUUID().toString();
    Person person = service.createPerson(title, name);
    assertNotNull("could not create a person", person);
    assertEquals("title did not equal for that person", title, person.getTitle());
    assertEquals("name did not equal for that person", name, person.getName());
 }

JUnit5 中的示例

@Test
public void testCreatePersonCorrect() {
    String name = UUID.randomUUID().toString();
    String title = UUID.randomUUID().toString();
    Person person = service.createPerson(title, name);
    assertNotNull(person, "could not create a person");
    assertEquals(title, person.getTitle(), "title did not equal for that person");
    assertEquals(name, person.getName(), "name did not equal for that person");
 }

开始源处理之前的一个想法...

我会为 JUnit4 断言 (org.junit.Assert) 创建自定义包装器 class,如下所示:

public static class YourAsserts {
    ...
    public static void assertNotNull(String string, Object object) {
        Assert.assertNotNull(string, object);
    }
    ...
}

之后我将从依赖项中删除 JUnit4 和 JUnit5 并组织导入以使用您的自定义断言内容。添加 JUnit4 并测试更改。所有测试应该仍然通过。

Select 包装器中的方法并使用重构工具更改方法的签名。 (在 Eclipse 中:Alt + Shift + C) 如果更改了所有方法,只需删除包装器 class 并将 JUnit5 添加到依赖项并再次组织导入。 运行 再次测试。

这对我有用,但目前我正在使用 Hamcrest。那个更厉害

您可能会发现 JUnit Pioneer 的 convert-junit4-to-junit5 工具很有用。

如果您使用的是 IntelliJ IDEA,它内置了从 JUnit 4 迁移到 JUnit Jupiter 的支持。有关示例,请参阅 Trisha Gee 在 YouTube 上的 IntelliJ IDEA. Migrating from JUnit 4 to JUnit 5 视频。

否则, 中建议的重构技巧可能是一个可行的替代方案。