현재 SecondClass
을 작성해야하며 그렇지 않으면 테스트 할 수 없기 때문에 이러한 종류의 솔루션을 사용하여 작성하기로 결정했습니다.테스트를 위해 추가 생성자를 사용하는 것이 얼마나 좋은가?
@Component
public class FirstClass {
public void doStuff() {
System.out.println("First Class stuff!");
}
}
@Component
public class SecondClass {
private final Random random;
private final FirstClass firstClass;
@Autowired
public SecondClass(FirstClass firstClass) {
this(new Random(), firstClass);
}
public SecondClass(Random random, FirstClass firstClass) {
this.random = random;
this.firstClass = firstClass;
}
public void doOtherStuff() {
firstClass.doStuff();
System.out.println("Second Class stuff " + random.nextInt(10));
}
}
내 동료는 이런 식으로 해결의 길을 좋아 SecondClass
의 구현을 선호하지 않았다 :
@Component
public class SecondClass {
private Random random;
private final FirstClass firstClass;
@Autowired
public SecondClass(FirstClass firstClass) {
this.random = new Random();
this.firstClass = firstClass;
}
public void doOtherStuff() {
firstClass.doStuff();
System.out.println("Second Class stuff " + random.nextInt(10));
}
public void setRandom(Random random) {
this.random = random;
}
}
내가 Random
이의 필요한 부분이라고 생각하기 때문에 나는 이러한 유형의 솔루션에 동의 이 클래스는 실행 시간에 변경되지 않을 것이고 setter는 테스트 목적으로 만 필요하기 때문에 두 생성자가있는 솔루션을 선호합니다.
@Autowired(required = false)
public SecondClass(FirstClasss firstClass, Random random) {
this.random = (random == null ? new Random() : random)
...
}
을하지만 그들 모두가 요구했을 경우 것이 바람직 할 것이다, 그래서 생성자 주입 실제로 이상의 구성 요소가있다 :
우리는 또한 생성자의이 종류를 내놓았다.내가 여기있는 사람이 전에 이런 종류의 경험을했다면 관심이 있습니까? 이 사건에 대해 어떻게 생각하며이 문제를 해결할 더 좋은 방법이 있다면?
제 경험에서 나는 꽤 많은 복합 생성자를 사용했고'final' 필드는 필수적이었습니다 (명백하게 이유가있는 곳은 어디입니까?) –
@PaoloForgia 당신이 경험 한 것에 대해 더 많이 알려 주실 수 있습니까? 여러 생성자가 실제로 도움이되었습니다. – GROX13
http://stackoverflow.com/questions/34571/how-to-test-a-class-that-has-private-methods-fields-or-inner-classes –