나는 약 10 개월 동안 자바를 배웠다. 그래서 나는 그다지 경험이 없다. 개인적인 방법과 변수를 테스트하는 것이 얼마나 나쁜지에 대해 최근에 조금 읽었습니다.개인 변수 테스트 - 항상 나쁜 습관?
나쁜 디자인을 제안 할 때 완벽한 세상에서하지 말아야합니다. 그러나 대부분의 방법이 리플렉션을 통해 호출되고 나쁜 디자인 인 레거시 프레임 워크로 작업하고 있지만 무엇을 변경하지 않아도됩니다. . 프레임 워크의 작동 방식을 변경할 수 없으므로 "코드를 다시 디자인해야합니다"라고 대답하지 마십시오.
'flow'클래스가 특정 방식으로 동작하고 private 변수의 상태에 따라 올바른 메소드를 호출하는지 테스트하고 싶습니다. 특정 메소드가 private 인스턴스 변수를 올바른 값으로 설정했는지 확인하고 싶습니다. if 다른 개인 변수에는 특정 값이 있습니다. 클래스의 흐름/동작이 손상되거나 변경되지 않았 음을 보장 할 수있는 클래스에 대한 향후 변경 사항을 적용 할 때 그렇습니다.
이제 흐름은 개인 인스턴스 변수의 상태에 크게 좌우되기 때문에 개인 인스턴스 변수의 상태를 테스트하는 것이 좋지 않기 때문에 - 클래스를 테스트하려면 어떻게해야합니까? 모든 작업이 민간 변수를 테스트
방법 :
코드의 끝에 기본 액세스 getter 및 setter를 구현하고 같은 패키지에 JUnit 테스트 클래스를 넣어. 테스트에만 사용되어야한다는 점을 명확하게 설명하십시오.
인스턴스 변수를 개인용 대신 기본 액세스로 설정하고 junit 테스트 클래스를 동일한 패키지에 넣습니다. 같은 패키지 내의 다른 클래스는이 클래스를 인스턴스화하지 않습니다.
리플렉션을 통해 개인 변수 테스트 - 변수 이름을 변경하면 이클립스가 리팩터링하지 않으므로 여기 IDE 기능이 없어져 테스트 할 클래스의 변수 이름과 일치하도록 문자열을 수동으로 변경하는 것이 어려울 수 있습니다. .
위의 세 가지 중 어떤 것을 "덜"악마로 사용할 수 있습니까? 개인 변수를 테스트 한 후 전혀 테스트하지 않는 것이 더 낫습니까?
개인 변수를 테스트해서는 안됩니다. 수업이 * 어떻게 *하는지 * 시험하십시오. – Bohemian
가장 좋은 대답은 보헤미안 답을 선택했습니다. public 메소드를 호출 할 때 호출 될 순서대로 호출 한 다음 특정 메소드가 다른 메소드를 호출하는지 확인합니다. 필자가 테스트하기 전에 호출 된 public 메소드는 private 변수를 메소드가 다르게 작동하게하는 것으로 설정해야하며, 그 동작을 테스트 할 수 있습니다. 이것이 가져올 수있는 한 가지 단점은 특정 흐름의 비트에 메소드를 추가하려는 경우이를 반영하도록 테스트를 업데이트하고 해당 메소드를 호출해야한다는 것입니다. – DeaIss