JUnit 5에 대한 자동 수정 방법 및 클래스 가시성

4844 단어 junit5java
프로그래밍의 즐거움 중 하나는 최신 정보를 유지하는 데 필요한 지속적인 학습입니다. 문제 중 하나는 새로운 접근 방식의 채택에 영향을 줄 수 있는 친숙함과 사용 패턴을 구축한다는 것입니다. Sensei는 더 이상 사용되지 않는 패턴을 식별하고 앞으로 사용할 수정 사항을 알려줌으로써 마이그레이션을 도울 수 있습니다.

예를 들어 JUnit 4에서 JUnit 5로 마이그레이션할 때 모든 테스트 클래스와 메서드를 public로 작성하는 데 익숙했습니다. 그러나 JUnit 5에서는 package private가 될 수 있습니다.

예를 들어 대신에:

public class Junit5VisibilityTest {

    @Test
    public void thisDoesNotNeedToBePublic(){
        Assertions.assertTrue(true);
    }
}


나는 정말로 쓰고 싶다 :

class Junit5VisibilityTest {

    @Test
    void thisDoesNotNeedToBePublic(){
        Assertions.assertTrue(true);
    }
}


이것에 코딩하기 위해 근육 기억을 구축하는 데 시간이 걸렸고 여전히 가끔씩 실수합니다.

선생 사용



Sensei를 사용하면 public 메서드와 클래스를 찾고 자동으로 선언을 package private로 수정하는 레시피를 만들 수 있습니다.

이를 달성하기 위해 레시피를 만들었습니다.

Name - JUnit: JUnit 5 test methods do not need to be public
Description - JUnit 5 test methods do not need public visibility
Level - Error

Error로 분류한 이유는 이 코딩 방식을 없애고 IDE에서 코드를 작성할 때 문제를 더 잘 파악하고 싶기 때문입니다.

클래스 선언 수정



클래스를 찾기 위해 Junit 5, 즉 @Test에서 자식 주석이 org.junit.jupiter.api.Test인 클래스를 검색합니다.

클래스에 수정자public가 있는 경우:

search:
  class:
    with:
      child:
        annotation:
          type: "org.junit.jupiter.api.Test"
    modifier: "public"


그런 다음 빠른 수정은 수정자를 변경하여 가시성을 제거하여 기본값이 되도록 하고 기본값은 내가 찾고 있는 package private입니다.

availableFixes:
- name: "remove public visibility from JUnit 5  Test class"
  actions:
  - changeModifiers:
      visibility: ""


메서드 선언 수정



메소드 선언 수정 레시피는 클래스 레시피와 거의 동일합니다.

먼저 JUnit 5에서 public로 주석이 달린 @Test 메서드를 검색합니다.

search:
  method:
    annotation:
      type: "org.junit.jupiter.api.Test"
    modifier: "public"


그런 다음 수정자를 기본 가시성으로 변경합니다.

availableFixes:
- name: "Remove @Test method public visibility"
  actions:
  - changeModifiers:
      visibility: ""


힌트: 여러 방법 수정



선생님은 현재 파일의 모든 위반 사항에 QuickFix를 적용할 수 있습니다.

QuickFix를 적용하기 위해 alt+enter를 사용할 때.

QuickFix 이름 메뉴를 확장하면 다음 옵션이 표시됩니다.

"모두 수정: 파일의 'JUnit: JUnit 5 테스트 방법이 공개될 필요가 없습니다.' 문제"

내가 해당 옵션을 선택하면 Sensei는 내가 선택한 문제뿐만 아니라 문제의 모든 항목을 수정합니다.



클래스 수정



메서드가 공개일 필요가 없는 것과 마찬가지로 클래스도 마찬가지입니다.

레시피와 QuickFix를 생성하여 클래스를 수정할 수 있습니다.

Name - JUnit: Junit 5 Test classes do not need to be public
Description - Junit 5 Test classes do not need to be public
Level - Error

public이고 @Test 주석이 있는 메서드가 있는 클래스를 찾을 때. 그런 다음 가시성을 변경하고 싶습니다.

search:
  class:
    modifier: "public"
    anyOf:
    - child:
        method:
          annotation:
            type: "Test"

changeModifiers 작업을 다시 사용하여 클래스 정의를 변경할 수 있습니다.

availableFixes:
- name: "Remove @Test class public visibility"
  actions:
  - changeModifiers:
      visibility: ""


요약



정적 분석 도구는 처음에 JUnit에서 이 권장 접근 방식을 알려주었습니다. 그러나 정적 분석 도구는 프로그래밍하면서 코드를 변경하기 위한 근육 기억력을 구축하는 데 도움이 되지 않았습니다.

경고하려면 '수준'을 사용하십시오. 그것이 문제일 때 나는 처음에는 그것을 '오류'로 만들고 코딩 접근 방식에서 벗어나면서 이것을 줄입니다.

QuickFix를 적용할 때 드롭다운 메뉴 옵션을 사용하여 Sensei를 사용하여 현재 파일의 모든 문제를 동시에 수정할 수 있습니다.

Sensei 레시피를 만들면 이전 코딩 접근 방식을 실시간으로 볼 수 있습니다. 그리고 이따금 코딩에서 실수할 경우 접근 방식을 강화하기 위해 QuickFix합니다.


"Preferences\Plugins"(Mac) 또는 "Settings\Plugins"(Windows)를 사용하여 IntelliJ 내에서 "sensei secure code"를 검색하여 Sensei를 설치할 수 있습니다.

이에 대한 소스 코드 및 레시피는 Secure Code Warrior GitHub 계정의 sensei-blog-examples 모듈에 있는 junitexamples 리포지토리에서 찾을 수 있습니다.
  • github.com/securecodewarrior/sensei-blog-examples
  • 좋은 웹페이지 즐겨찾기