prueba de unidad de resorte de arranque se ejecuta todo el programa

Csaba Farago:

Me gustaría poner en práctica una prueba de integración con Spring arranque. Empiezo con la spring-boot-starter-testdependencia, 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 @SpringBootTestlos resultados NoSuchBeanDefinitionException.
  • 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!

pvpkiran:

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.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=373217&siteId=1
Recomendado
Clasificación