코드에서 발생할 수 있는 예외를 검증할 때, 모범 사례는 테스트 코드에서 여러 개의 함수 호출을 피하고 무엇이 테스트돼야 하는지 명확히 하는 것 입니다.
두개의 함수가 같은 checked exception
을 일으킬 수 있을 때, 정말로 테스트하고자 하는 것이 무엇인지 알 수 없기 때문에 이 모범 사례를 존중하지 않는 것은 버그입니다.
테스트 코드에서 오직 하나의 함수만이 예상되는 checked exception
을 일으키도록 해야합니다.
규칙을 어긴 코드
@Test
public void testG() {
// g() 또는 f() 함수 중 하나가 예외를 던질 것이라고 예상하십니까?
assertThrows(IOException.class, () -> g(f(1)) ); // 규칙을 어긴 코드
}
@Test
public void testGTryCatchIdiom() {
try { // 규칙을 어긴 코드
g(f(1));
Assert.fail("Expected an IOException to be thrown");
} catch (IOException e) {
// Test exception message...
}
}
int f(int x) throws IOException {
// ...
}
int g(int x) throws IOException {
// ...
}
규칙을 준수한 해결책
@Test
public void testG() {
int y = f(1);
// f() 함수가 아닌 g() 함수로부터 예외가 발생할 것이라고 명시하고 있습니다.
assertThrows(IOException.class, () -> g(y) );
}
@Test
public void testGTryCatchIdiom() {
int y = f(1);
try {
g(y);
Assert.fail("Expected an IOException to be thrown");
} catch (IOException e) {
// Test exception message...
}
}
If you like SONARKUBE, don’t forget to give me a star.