개인 방법 테스트의 의미에 대해 다른 의견이 있습니다 (예 : here 및 here). 나는 개인적으로 그것이 합리적이라고 생각한다. 문제는 그것을 올바르게하는 것이다. C++에서 #define
hack을 사용하거나 테스트 클래스 friend
을 만들 수 있습니다. C#에는 InternalsVisibleToAttribute이 있지만 Java에서는 reflection을 사용하거나 의도를 명확하게하기 위해 테스트 용으로 표시 가능하도록 annotate them as such을 사용해야합니다. 둘 다의 단점은 분명해야합니다.개인 도구 테스트 용 Java 도구?
나는 더 나은 것이 있어야한다고 생각합니다. 그것은 좋은 것
public class Something {
private int internalSecret() {
return 43;
}
}
시작하면 주석이 자동 반사를 사용하여 something
의 개인 방법으로 모든 통화를 변환 할 다음
@MakeVisibleForTesting Something something = new Something();
Assert.assertEquals(43, something.internalSecret());
같은 테스트 코드에서 private 메소드를 호출 할 수 있습니다. 나는 Lombok가 그것을 할 수 있는지 궁금하다 (그리고 저자에게 물을 것이다).
많은 마법을 사용하는 것이 너무 복잡하고 어떤 경우에는 시간이 걸릴 수 있으므로 가능한 대안을 찾고 있습니다. 어쩌면 @Decapsulate
같은과 테스트중인 클래스를 주석과
Decapsulated_Something something = new Decapsulated_Something(new Something());
Assert.assertEquals(43, something.internalSecret());
를 사용할 수 있도록 할
public class Decapsulated_Something {
public Decapsulated_Something(Something delegate) {
this.delegate = delegate
}
public boolean internalSecret() {
// call "delegate.internalSecret()" using reflection
}
...
}
처럼 보이는 클래스
Decapsulated_Something
를 생성하는 주석 프로세서를 사용하여 나는 주석과 많은 경험이없는 처리하기 때문에 여기에서 먼저 묻습니다 :
- 구현이 얼마나 복잡합니까?
- 무엇을 잊었습니까?
- 일반적으로 어떻게 생각하십니까?
전나무에게 도구를 요청하거나 직접 작성하는 방법이 있습니까? – Raedwald
@Raedwald 나는 그것을 해결하는 방법을 묻습니다. 자신을 짜내는 것이 하나의 옵션이지만, 바퀴를 다시 발명하는 것은 명백하게 요구되지 않습니다. – maaartinus