Tengo una aplicación web que accede a un servicio web externo. Estoy escribiendo un paquete de prueba de aceptación automática para la aplicación web. No quiero invocar el servicio web externo ya que tiene una sobrecarga importante, quiero burlarme de este servicio web. ¿Cómo puede lograr esto sin cambiar el contexto de la aplicación web? Recientemente migramos a Spring 3.1, por lo que estoy tentado de utilizar las nuevas características del entorno. ¿Esta nueva característica me ayudaría a anular este único servicio web y dejar el contexto de la aplicación como está?cómo anular el bean único definido en el contexto de la aplicación
Respuesta
Utilizaría un BeanFactoryPostProcessor
para hacer esto, que solo está registrado en los escenarios de prueba que desea que se burlen.
El BeanFactoryPostProcessor
le permite modificar el Contexto de la aplicación inmediatamente después de que se haya creado y completado. Puede buscar el nombre de su bean específico y registrar un bean diferente para él.
public class SystemTestBeanFactoryPostProcessor implements BeanFactoryPostProcessor
{
@Override
public void postProcessBeanFactory(final ConfigurableListableBeanFactory factory) throws BeansException
{
final MyInterface myInterface = new MyInterfaceStub();
factory.registerSingleton("myInterfaceBeanName", myInterface);
}
}
Esto le permitirá sobreescribir solo los granos que quiera cortar/simular.
No estoy seguro de que esta sea la "nueva forma 3.x 'de hacer este tipo de cosas. Pero es muy sencillo y fácil de implementar.
Utilizaría la función Spring @Profile, que supongo que son las "características del entorno" a las que se estaba refiriendo.
Por ejemplo:
@Service @Profile("dev")
public class FakeWebService implements WebService {
}
@Service @Profile("production")
public class ExternalWebService implements WebService {
}
EDITAR
Y para especificar qué perfil utilizar en su prueba:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("/app-config.xml")
@ActiveProfiles("dev")
public class MyAcceptanceTest {
}
Ver this section de los documentos de la primavera para más detalles.
Hay varias formas de configurar el perfil activo en la producción, pero el método que he usado antes es en el web.xml:
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>spring.profiles.active</param-name>
<param-value>production</param-value>
</init-param>
</servlet>
- 1. Anulando el bean definido en el contexto principal en un contexto secundario
- 2. Reemplace el bean de primavera en un contexto con la versión simulada de otro contexto
- 3. Cómo anular: orden definido en una has_many
- 4. ¿Cuál es la diferencia entre @Autowired y obtener un bean del contexto de la aplicación?
- 5. restricción único con valor definido
- 6. ¿Cómo extender listas y mapas ya definidos en el contexto de la aplicación Spring?
- 7. Spring Security + MVC: preguntas sobre la definición de contexto y el alcance de bean
- 8. Defina el bean DataSource en el código
- 9. Cómo declarar un contexto de aplicación principal
- 10. Cómo iniciar un intento si el contexto no es Contexto de actividad sino contexto de aplicación
- 11. Agregar bean mediante programación al contexto de la aplicación web de Spring
- 12. ¿Se puede cambiar el contexto de la aplicación durante el ciclo de vida de la aplicación?
- 13. Problema con Autowiring & No bean único
- 14. ¿Cómo obtener el atributo de modelo o el bean de primavera en el decorador de sitemesh?
- 15. JSF inicializa el bean scope-scope cuando se inicializa el contexto
- 16. ¿Qué significa 'visitante único' en el contexto de Google Analytics en Android?
- 17. ¿Cómo anular el operador []?
- 18. inyectando frijoles simulados en el contexto de primavera para la prueba
- 19. Configurar intencionalmente un bean de resorte para anular
- 20. ¿Alguna vez se destruye el contexto de la aplicación Android?
- 21. Jerarquía de contexto de primavera con contexto de aplicación web
- 22. Contexto de la aplicación de primavera: acceda a los parámetros de contexto de web.xml?
- 23. ¿Cómo anular el evento onclose en WPF?
- 24. ¿Cómo obtengo el contexto de la intención?
- 25. ¿Puedo anular el botón "Inicio" en mi aplicación?
- 26. contexto de la aplicación SharedPreferences frente al contexto de actividad
- 27. primavera PropertyPlaceholderConfigurer y el contexto: la propiedad-marcador de posición
- 28. ¿Cómo ejecutar trabajos justo después de que el resorte cargue el contexto de la aplicación?
- 29. ¿Cómo hacer autocompletar mostrar las sugerencias de métodos para anular en el contexto de la subclase en Intellij IDEA?
- 30. obteniendo excepción: Ningún bean llamado 'springSecurityFilterChain' está definido
¿Dónde se especifica qué 'Profile' que está utilizando en su configuración de prueba (o su configuración de producción)? –
He actualizado mi respuesta con algunos ejemplos, también puede usar la configuración de perfil en beans.xml si es necesario. – seanhodges
+1 ¡Gracias! Muy buen ejemplo. –