Me gustaría poner en práctica una prueba de integración con Spring arranque. Empiezo con la spring-boot-starter-test
dependencia, la versión 2.2.5.RELEASE
.
Tengo el siguiente componente:
@Component
public class MyMath {
public int add(int a, int b) {
return a + b;
}
}
El programa principal se ve así:
@SpringBootApplication
public class Main implements CommandLineRunner {
public static void main(String[] args) {
SpringApplication.run(Main.class, args);
}
@Autowired
private MyMath myMath;
@Override
public void run(String... args) throws Exception {
System.out.println(myMath.add(2, 3));
}
}
Funciona como se espera - hasta ahora, todo bien. Me gustaría añadir una prueba de unidad:
@RunWith(SpringRunner.class)
@SpringBootTest
public class MyMathTest {
@Autowired
private MyMath myMath;
@Test
public void testSaveAndList() {
assertEquals(5, myMath.add(2, 3));
}
}
Esto también funciona, pero de acuerdo con el registro se ejecuta todo el programa . No quiero para ejecutar el programa en sí, sólo la MyMath.add()
función. ¿Cómo puedo hacer eso?
He intentado lo siguiente hasta el momento:
@RunWith(SpringJUnit4ClassRunner.class)
proporcionado el mismo resultado.- La omisión de
@SpringBootTest
los resultadosNoSuchBeanDefinitionException
. - Al volver a formatear el código para tener frijol en lugar del componente, como a continuación funciona.
MyMath
sin anotación:
public class MyMath {
public int add(int a, int b) {
return a + b;
}
}
Main
sigue siendo el mismo.
@Configuration
public class AppConfig {
@Bean
public MyMath getMyMath() {
return new MyMath();
}
}
Y la prueba:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = AppConfig.class)
public class MyMathTest {
@Autowired
private MyMath myMath;
@Test
public void testSaveAndList() {
assertEquals(5, myMath.add(2, 3));
}
}
Así que lo que no puedo hacer es poner a prueba un componente sin ejecutar todo el programa. Podría alguien ayudarme? ¡Gracias!
No es necesario refactorizar su código. Hemos de tener la clase MyMath ya que es
@Component
public class MyMath {
public int add(int a, int b) {
return a + b;
}
}
Cambiar su clase de prueba como esta
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = MyMath.class)
public class MyMathTest {
@Autowired
private MyMath myMath;
@Test
public void testSaveAndList() {
assertEquals(5, myMath.add(2, 3));
}
}
Esto se convierte en un poco complejo si su clase MyMath ha autowired otras dependencias. Entonces usted tiene que utilizar burla.