사용하지 않는 할당은 제거해야 합니다.
데드 스토어는 로컬 변수 후속 명령에 의해 읽히지 않는 값이 할당될 때 발생합니다. 값을 계산하거나 검색하여 덮어쓰거나 버리면 코드에 심각한 오류가 발생할 수 있습니다. 오류가 아니더라도 자원 낭비 입니다. 따라서 계산된 모든 값을 사용해야 합니다.
규칙을 어긴 코드
def func(a, b, compute):
i = a + b # 규칙을 어긴 코드; 값을 덮어쓰기 전 계산한 결과를 사용하지 않음
i = compute()
return i
규칙을 준수한 해결책
def func(a, b, compute):
i = a + b
i += compute()
return i
...
Mockito 함수인 verify(), when(), given()를 호출할 때는 간소화되어야 합니다.
Mockito는 유연한 객체의 조작(stubbing)이나 함수 호출을 검증하기 위해 인수 일치자(argument matcher)를 제공합니다.
각 Mockito.verify(), Mockito.when(), Stubber.when(), BDDMockito.given() 함수는 인수 일치자 유무와 상관없이 오버로드를 할 수 있습니다. 그러나 기본 일치 동작(즉, 인수 일치자가 없는 경우)은 equals()를 사용합니다.
만약 오직 org.mockito.ArgumentMatchers.eq() 일치자만 사용된다면, 그 호출은 일치자 없이 호출한 것과 동일합니다. 즉, eq() 함수는 불필요하고 생략할 수 있습니다.
...
연속된 AssertJ assertThat() 문은 체이닝되어야 합니다.
같은 객체를 타겟팅하는 AssertJ assertion 함수는 여러 개의 assertThat을 사용하는 대신 체이닝되어야 합니다. 그것은 중복을 피하고 코드의 명료함을 증가시킵니다.
이 규칙은 같은 객체에 대해 여러 개의 assertThat()을 사용하는 경우 문제를 제기합니다.
규칙을 어긴 코드
assertThat(someList).hasSize(3);
assertThat(someList).contains("something");
규칙을 준수한 코드
assertThat(someList)
.hasSize(3)
.contains("something");
If you like SONARKU...
체이닝된 AssertJ assertion은 해당 전용 assertion으로 간소화되어야 합니다.
AssertJ는 일반적인 타입에 특정한 많은 assertion 함수를 포함합니다. 두 버전은 같은 것을 테스트하지만 전용 assertion은 더 나은 에러메시지를 제공하고, 디버깅 과정을 간소화 합니다.
이 규칙은 assertion을 전용 assertion으로 간소화할 수 있을 때 문제를 제기합니다.
다음은 이 규칙에 의해 보고되는 완전하지 않은 assertion 리스트입니다. 또한, 코드가 유사하거나 부정으로 동작할 수 있을 때 보고됩니다.
Related to Object
Original
Dedicated
assertThat(ge...
JUnit5 테스트 클래스와 함수는 기본 패키지 가시성을 가져야 합니다.
JUnit5는 모든 것을 public으로 요구하는 JUnit4 보다 테스트 클래스의 가시성에 대해 더욱 관대합니다.
이러한 맥락에서 JUNit5 테스트 클래스는 private을 제외한 모든 가시성을 가질 수 있지만 코드의 가독성을 향상시키는 기본 패키지 가시성을 사용하는 것이 좋습니다.
규칙을 어긴 코드
import org.junit.jupiter.api.Test;
public class MyClassTest { // 규칙을 어긴 코드 - modifier를 삭제할 수 있습니다.
@Test
protected void test() { // 규칙을 어긴 코드 - modifier를 삭제할 수 있습니다...
메소드의 인지 복잡도가 너무 높아서는 안됩니다.
인지 복잡도(Cognitive Complexity) 는 메소드의 실행 흐름이 얼마나 이해하기 어려운지를 측정하는 지표입니다.
인지 복잡도가 높은 메소드는 유지보수하기 어려울 것입니다.
예외
eqauls 및 hashCode 메소드는 자동으로 생성될 수 있고, 특히 많은 필드가 존재하는 경우 이해하기 어려울 수 있으므로 무시됩니다.
참고
Cognitive Complexity
If you like SONARKUBE, don’t forget to give me a star.
원문으로 바로가기
테스트 클래스는 네이밍 컨벤션을 준수해야 합니다.
공유된 네이밍 컨벤션은 팀이 효율적으로 일하게 합니다. 이 규칙은 테스트 클래스 이름이 제공되는 정규식에 맞지 않는 경우 문제를 제기합니다.
규칙을 어긴 코드
기본 값: ^((Test
IT)[a-zA-Z0-9_]+
[A-Z][a-zA-Z0-9_]*(Test
Tests
TestCase
IT
ITCase))$
class Foo { // 규칙을 어긴 코드
@Test
void check() { }
}
class Bar { // 규칙을 어긴 코드
@Nested
class Pos...
JUnit 규칙은 사용되어야 합니다.
일부 TestRule 클래스는 테스트에 의해 직접 참조되지 않고 원하는 효과를 갖는 반면에, 다른 클래스는 그렇지 않습니다. 그리고 사용하지 않을 파일을 정리한 상태로 둘 이유가 없습니다.
이 규칙은 다음 유형의 테스트 클래스 필드가 테스트 메서드에서 사용되지 않는 경우 문제를 제기합니다: TemporaryFolder, TestName.
이 규칙은 또한 다음 JUnit5 클래스에도 적용됩니다: TempDir, TestInfo.
규칙을 어긴 코드
public class ProjectDefinitionTest {
@Rule
public TemporaryFolder temp = new Tempor...
전체 글 239개, 30 페이지