> 일반적인 문제 > JUnit, 4, 5, 목성, 레트로

JUnit, 4, 5, 목성, 레트로

百草
풀어 주다: 2024-03-27 13:55:05
원래의
1213명이 탐색했습니다.

JUnit 5 릴리스에서는 JUnit 4에서 마이그레이션할 필요가 없으므로 이 라이브러리를 프로젝트에 통합하는 것이 간단해졌습니다. 그러나 JUnit 5와 4를 모두 사용하는 대규모 프로젝트에서는 이러한 공존으로 인해 혼란과 유지 관리 어려움이 발생할 수 있습니다. 이 문제를 해결하려면 이 기사에서는 JUnit 5의 새로운 기능에 대해 팀에 알리고, JUnit 5를 사용하여 새 테스트를 작성하도록 장려하고, JUnit 4를 제거할 때 Scout 규칙을 따르는 단계를 수행할 것을 권장합니다. 또한 이 기사에서는 주석, 메소드, 테스트 구성에 대한 업데이트와 새로운 @ParameterizedTest 주석을 포함하여 JUnit 5의 주요 변경 사항을 살펴봅니다. 마지막으로 이 기사에서는 JUnit 5로 마이그레이션하고 프로젝트를 최신 상태로 유지하기 위해 종속성을 제외하고, 구성 클래스를 생성하고, OpenRewrite를 사용하여 소스 코드를 자동으로 리팩터링하는 것의 중요성을 강조합니다.

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 4 대신 JUnit 5를 사용하여 새로운 테스트를 생성할 수 있도록 JUnit 5와 JUnit 4에서 제공되는 내용을 팀에 보여주어야 합니다. 그 후 JUnit 4 테스트를 통과할 때마다 Boy Scout 규칙에 따라 JUnit 5로 마이그레이션해야 합니다.

JUnit 5에서 발표된 주요 변경 사항을 살펴보겠습니다. 모든 것은 이름으로 시작합니다. JUnit 5에서는 org.junit5라는 패키지가 보이지 않고 org.junit.jupiter가 보입니다. 전체적으로, 여러분이 보는 모든 것에는 "Jupiter"가 있습니다. 이는 JUnit 5에서 온 것임을 의미합니다. 그들은 "JU"로 시작하는 목성이 태양으로부터 다섯 번째 행성이기 때문에 이 이름을 선택했습니다.

또 다른 변경 사항은 @Test에 관한 것입니다. 이 주석은 새 패키지인 org.junit.jupiter.api로 이동되었으며 이제 더 이상 "예상" 또는 "시간 초과"와 같은 속성을 사용하지 않지만 확장을 사용합니다. 예를 들어, 시간 초과의 경우 이제 @Timeout(값 = 100, 단위 = TimeUnit.MILLISECONDS) 주석이 있습니다. 또 다른 변경 사항은 테스트 메서드나 클래스가 공개될 필요가 없다는 것입니다.

@Before Now @After 대신 테스트 구성에서 @BeforeEach 및 @AfterEach를 사용해야 하며 @BeforeAlland @AfterAll도 있습니다.

테스트를 무시하려면 이제 @Ignore 대신 @Disable을 사용해야 합니다.

JUnit 5에서 발표된 좋은 소식 중 하나는 다양한 매개변수를 사용하여 테스트를 여러 번 실행할 수 있는 @ParameterizedTest 주석입니다. 예를 들어 특정 개체를 생성하는 메서드를 테스트하고 필드가 올바르게 채워졌는지 확인하려면 다음을 수행하면 됩니다.

@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<Arguments> 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의 종속성 분석기를 사용하고 있습니다.

JUnit, 4, 5, 목성, 레트로

보시다시피 Jersey-test는 JUnit 4를 사용하고 있습니다. 즉, 프로젝트에서 JUnit 4를 제거하더라도 JUnit 4는 여전히 작동합니다. Jersey를 교체하는 것이 더 쉬운 방법입니다. JUnit 때문에 2.35로 업그레이드하는 것입니다. 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 创建新测试,并且该项目不会成为弗兰肯斯坦。所以,记住,保持你的项目是最新的,因为如果你忘记了你的库,每一天都会更难更新,总是使用规范,以及遵循规范的框架,并且在你的代码中有一个好的设计,这允许您随设施改变和移动。

위 내용은 JUnit, 4, 5, 목성, 레트로의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dzone.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿