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.
Debe usar perfiles de primavera para saber qué tipo de frijol desea usar en diferentes contextos.
http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-profiles.html
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
tal vez esto podría ser útil para usted: