내가 아는 한, 크리스천의 대답을 바탕으로 솔기라는 용어는 Feathers의 저서 인 레거시 코드로 효과적으로 작업하는 것에서 유래 합니다. 정의는 31 페이지에 있습니다.
이음새는 해당 위치에서 편집하지 않고 프로그램의 동작을 변경할 수있는 장소입니다.
이음새가 무엇인지 아닌지에 대한 예를 제공하려면 다음 Java 코드를 고려하십시오.
public class MyClass {
private final Foo foo;
public MyClass(Foo foo) {
this.foo = foo;
}
public void doBunchOfStuff(BarFactory barFactory) {
// foo.doStuff() is a seam because I can inject a mock instance of Foo
this.foo.doStuff();
// barFactory.makeBars() is a seam because I can replace the default
// BarFactory instance with something else during testing
List<Bar> bars = barFactory.makeBars();
for(Bar bar : bars) {
// bar.cut() is also a seam because if I can mock out BarFactory, then
// I can get the mocked BarFactory to return mocked Bars.
bar.cut();
}
// MyStaticClass.staticCall() is not a seam because I cannot replace
// staticCall() with different behavior without calling a class besides
// MyStaticClass, or changing the code in MyStaticClass.
MyStaticClass.staticCall();
// This is not a seam either because I can't change the behavior of what
// happens when instanceCall() occurs with out changing this method or
// the code in instanceCall().
(new MyInstanceClass()).instanceCall();
}
}
위에서 예시 한 이음새는 다음과 같은 경우가 아니면 이음새가됩니다.
- 주입되는 클래스는 최종적입니다.
- 호출되는 메소드가 최종입니다.
기본적으로 솔기는 단위 테스트를 용이하게합니다. 및 MyClass
에 대한 호출로 인해 단위 테스트를 작성할 수 없습니다 . 에 대한 모든 단위 테스트 의 방법은 테스트해야 하고 그리고 모든 전화를받을 그들의 종속성. 반대로, 비 - 최종적 방법 (또는 더 좋은 - 인터페이스)와 비 최종 클래스를 사용함으로써, 주입의 경우 와 있도록 단위 테스트 조롱을 촉진함으로써 작성할 수.MyStaticClass.staticCall()
(new MyInstanceClass()).instanceCall()
MyClass
doBunchOfStuff()
MyStaticClass.staticCall()
(new MyInstanceClass()).instanceCall()
Foo
BarFactory
MyClass