2010-06-22 2 views
3

JUnit FAQ에서 당신은 read으로 너무 쉬울 수있는 방법을 테스트하면 안된다. 모든 예가 논리적 인 것처럼 보이지만 ("getter and setters", "delegation"등), 나는 "스스로 깨뜨릴 수 없다"는 개념을 충분히 이해할 수 있을지 확신하지 못합니다. 그 방법이 "스스로 깨뜨릴 수 없다"고 언제 말하겠습니까? 누구든지 정성을 다해 신경 써야하니?'너무 간단하다'는 게 얼마나 간단합니까? - 설명

답변

3

나는 "자체적으로 깨뜨릴 수 없다"는 것은 그 메소드가 오직 자신의 클래스의 요소만을 사용하고 다른 객체/클래스의 행위에 의존하지 않는다는 것, 또는 모든 기능을 다른 어떤 메소드 나 클래스 (아마도 자체 테스트를 가지고있다).

기본 아이디어는 다른 메소드 나 클래스를 참조 할 필요없이 메소드가하는 모든 것을 볼 수 있고 그것이 맞다는 것을 확신한다면 테스트가 필요 없을 것입니다.

반드시 명확한 선은 아닙니다. "너무 쉽게 부러지기"는 보는 사람의 눈에 있습니다.

1

아무리 간단한 방법이라도 여전히 잘못 될 수 있습니다. 예를 들어, 비슷한 이름을 가진 두 개의 변수가 있고 잘못된 변수에 액세스 할 수 있습니다. 그러나 이러한 오류는 신속하게 발견 될 수 있으며 일단 이러한 메서드가 올바르게 작성되면 올바르게 유지 될 것이므로 영구적으로이 테스트를 수행 할 가치가 없습니다. "너무 쉬기가 너무 간단"하기보다는 영구 시험을 치르는 것이 너무 단순한 지 고려해 볼 것을 권합니다.

+0

필자는 테스트를 회귀로 유지한다고 주장 할 것이다. 코드를 작성할 때 실수로 저 보잘 것없는 유지 보수를하는 사람들을 생각해 볼 수 있다면, – Gutzofter

1

이렇게하면 나무 테이블을 만들 수 있습니다.

실패 할 수있는 일을 테스트합니다. 예를 들어, 테이블에 항아리를 두거나 테이블 위에 앉아서 또는 테이블을 한쪽에서 다른쪽으로 밀어 넣으면서 테이블을 테스트하고 있습니다. 당신이 그것을 사용할 것이라는 것을 당신이 아는 방식.

"너무 쉽게 부러 질 수 있기 때문에"손톱이나 다리 중 하나를 테스트하지 마십시오.

단위 테스트의 경우와 마찬가지로 getter/setter를 테스트하지 않습니다. 런타임 환경이 실패하기 때문에 실패 할 수있는 유일한 방법이기 때문입니다. 메시지를 다른 메소드로 전달하는 메소드는 테스트하기가 쉽지 않다. 너무 간단하기 때문에 직접 참조 메소드를 테스트 해 보라.

이 정보가 도움이되기를 바랍니다.

2

이렇게 생각해보십시오. 당신은 실제로 방법을 테스트하지 않습니다. 어떤 행동을 설명하고 그것을 사용하는 방법에 대한 몇 가지 예를 들어서 나중에 다른 사람 (자신을 포함하여)이 와서 그 행동을 나중에 안전하게 바꿀 수 있습니다. 예제는 실행 가능합니다.

사람들이 코드를 안전하게 변경할 수 있다고 생각하면 걱정할 필요가 없습니다.

0

기본적으로 (이 맥락에서) 소프트웨어의 다양한 가능한 위험을 파악하고 위험도가 높은 부분에 대한 테스트 만 정의한다는 것을 의미하는 risk based approach of GAMP 5을 좋아합니다.

이것은 GxP 환경에 적용되지만 다음과 같은 방식으로 적용될 수 있습니다. 특정 클래스에 오류가있는 메소드가있을 가능성과 오류가 얼마나 큰 영향을 미칩니 까? 예를 들어 메소드가 사용자에게 리소스에 대한 액세스 권한을 부여할지 여부를 결정하는 경우 물론 충분히 테스트해야합니다.

즉, "너무 간단하다"와 "잠재적 인 결함"이 초래할 수있는 결과를 고려하는 데 도움이 될 수있는 부분을 구분해야합니다.

1

TDD를 사용하는 경우 해당 조언이 잘못되었습니다. TDD의 경우 이 있기 때문에 테스트가 실패했습니다. 함수가 단순한 지 여부는 중요하지 않습니다.

그러나 기존 코드에 테스트를 추가하는 경우, 중단 할 수없는 코드를 테스트 할 필요가 없다는 주장을 이해할 수 있습니다. 그러나 나는 그것이 시험을 쓰지 않아도되는 핑계라고 생각한다. 또한 코드의 일부분 만 테스트 할 가치가 없다면 그 코드가 전혀 필요하지 않을 수도 있습니다.

+0

hm, tdd를하고 있다면 getters와 setter가 필요하지만 그 테스트를 작성할 필요는 없습니다. – Dan

+1

요점은 _any_ code 이전에 _first_ 테스트를 작성한다는 것입니다. 그것은 getter와 setters를 (물론) 포함합니다. –

+3

setters/getters는 실제로 원하는 동작을 실제로 수행하는 실패한 테스트에 의해 제 위치에 유도 된 경우에만 존재합니다. 당신은 다음과 같은 테스트를 결코하지 않을 것입니다 : a.setA (1); 주장하다 (a.getA, 1); –

관련 문제