used starter framework componentscan actuator spring spring-boot spring-annotations

spring - starter - Anulación de un Bean Autowired en pruebas unitarias



spring boot starter web (5)

¿Existe alguna manera simple de sobrepasar fácilmente un bean autowired en pruebas de unidades específicas? Solo hay un solo bean de cada tipo en las clases de compilación, por lo que no es un problema para el autoenvío en este caso. Las clases de prueba contendrían burlas adicionales. Cuando ejecuto una prueba de unidad simplemente me gustaría especificar una Configuración adicional que diga básicamente, mientras se ejecuta esta prueba de uso, use esta simulación en lugar del bean estándar.

Los perfiles parecen un poco excesivos para lo que requiero y no estoy seguro de que esto pueda lograrse con la anotación Primaria, ya que la prueba unitaria diferente podría tener diferentes simulaciones.



En Spring Boot 1.4 hay una manera simple de hacerlo:

@RunWith(SpringRunner.class) @SpringBootTest(classes = { MyApplication.class }) public class MyTests { @MockBean private MyBeanClass myTestBean; @Before public void setup() { ... when(myTestBean.doSomething()).thenReturn(someResult); } @Test public void test() { // MyBeanClass bean is replaced with myTestBean in the ApplicationContext here } }


Si simplemente desea proporcionar un bean diferente en sus pruebas, creo que no necesita usar perfiles de resorte o mockito.

Solo haz lo siguiente:

@RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = { TestConfig.class }) public class MyTest { @Configuration @Import(Application.class) // the actual configuration public static class TestConfig { @Bean public IMyService myService() { return new MockedMyService(); } } @Test public void test() { .... } }

NOTA: probado con arranque de resorte 1.3.2 / primavera 4.2.4


Tuve un problema similar y lo resolví con una combinación y encontré este más útil y reutilizable. Creé un perfil de primavera para las pruebas y una clase de configuración que anula los beans que quiero burlar de una manera muy simple:

@Profile("test") @Configuration @Import(ApplicationConfiguration.class) public class ConfigurationTests { @MockBean private Producer kafkaProducer; @MockBean private SlackNotifier slackNotifier; }

Al hacer eso, puedo @Autowire esos frijoles simulados y usar mockito para verificar en ellos. La principal ventaja es que ahora todas las pruebas obtienen los beans simulados sin ningún cambio por prueba. Probado con:

arranque de primavera 1.4.2