Sobre la base de la respuesta de Christian, que yo sepa, el término costura se origina en el libro de Plumas, Trabajando eficazmente con código heredado . La definición está en la página 31:
Una costura es un lugar donde puede alterar el comportamiento en su programa sin editar en ese lugar.
Para dar ejemplos de qué es una costura y qué no es, considere el siguiente código 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();
}
}
Las costuras ejemplificadas anteriormente serían costuras a menos que:
- La clase que se inyecta es final.
- El método que se llama es final.
Básicamente, las costuras facilitan las pruebas unitarias. No puedo escribir una prueba unitaria MyClassdebido a las llamadas a MyStaticClass.staticCall()y (new MyInstanceClass()).instanceCall(). Cualquier prueba de la unidad de MyClass's doBunchOfStuff()método tendría que prueba MyStaticClass.staticCall()y (new MyInstanceClass()).instanceCall()y todas sus dependencias que consiguen llama. Por el contrario, al usar clases no finales con métodos no finales (o mejor aún, interfaces), las instancias inyectadas Fooy las BarFactorypruebas unitarias son MyClassposibles de escribir al facilitar la burla.