테스트 프레임워크를 사용할 때, 작성이 덜 끝난 assertions
을 사용하기 쉽습니다. 이 룰은 다음 케이스에 assertions
를 완료하도록 강제합니다.
- Fest:
assertThat
함수 다음에 assertion 호출이 없는 경우 - AssertJ:
assertThat
함수 다음에 assertion 호출이 없는 경우 - Mockito:
verify
함수 다음에 함수 호출이 없는 경우 - Truth:
assertXXX
함수 다음에 함수 호출이 없는 경우
이러한 경우, 테스트를 의도했지만 실제로 아무것도 검증하지 않습니다.
규칙을 어긴 코드
// Fest
boolean result = performAction();
// result 값이 true인지 확인해봅시다.
assertThat(result); // 규칙을 어긴 코드; 실제로 확인된 것은 없습니다. 테스트는 "result"가 참(true)이거나 거짓(false)이거나 상관없이 통과합니다.
// Mockito
List mockedList = Mockito.mock(List.class);
mockedList.add("one");
mockedList.clear();
// "add"와 "clear" 함수들이 실제로 호출되는지 확인해봅시다.
Mockito.verify(mockedList); // 규칙을 어긴 코드; 여기서 확인된 것은 없습니다. verify()에 연결된 호출이 없습니다.
규칙을 준수한 해결책
// Fest
boolean result = performAction();
// result 값이 true인지 확인해봅시다.
assertThat(result).isTrue(); // 규칙을 준수한 해결책
// Mockito
List mockedList = Mockito.mock(List.class);
mockedList.add("one");
mockedList.clear();
// "add"와 "clear" 함수들이 실제로 호출되는지 확인해봅시다.
Mockito.verify(mockedList).add("one"); // 규칙을 준수한 해결책
Mockito.verify(mockedList).clear(); // 규칙을 준수한 해결책
예외
private BooleanAssert check(String filename, String key) {
String fileContent = readFileContent(filename);
performReplacements(fileContent);
return assertThat(fileContent.contains(key)); // 여기엔 문제가 없습니다.
}
@Test
public void test() {
check("foo.txt", "key1").isTrue();
check("bar.txt", "key2").isTrue();
}
If you like SONARKUBE, don’t forget to give me a star.