Estoy buscando una buena manera de activar un perfil de resorte para mis pruebas de pepino. Las pruebas de pepino necesitan usar una versión stub de un servicio que está marcado con:
@Profile("test") @Component class FooServiceStub extends FooService {...}El servicio regular se ve así:
@Profile("prod") @Component class FooService {...}Mis requisitos:
Fuentes que he encontrado pero no resuelven mi problema:
Actualización de octubre de 2021:
La siguiente respuesta está desactualizada y ya no es la respuesta aceptada. ¡Marque la respuesta aceptada real en su lugar!
Respuesta original:
Resolví este problema con una anotación que puse en mi clase FeatureStep.
La anotación:
Tenga en cuenta los @ActiveProfiles en él.
import java.lang.annotation.*; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.ContextConfiguration; @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @ContextConfiguration @ActiveProfiles("test") @SpringBootTest( webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = FeatureTestConfiguration.class) public @interface FeatureFileSteps { }La clase de configuración es muy básica:
@Configuration @Import(FooApplication.class) public class FeatureTestConfiguration { }Usando la anotación:
Agregar la anotación a los pasos de la función:
@FeatureFileSteps public class FooFeatureSteps { @Given(...) @When(...) @Then(...) }Ahora, cuando ejecuto las pruebas de características de Cucumber, ya sea desde mi IDE, desde la línea de comando con maven o en el servidor de compilación, mi prueba está usando FooServiceSTub y mis pruebas pasan.
En la versión de pepino más reciente ( 6.11.0 ), necesita una clase con configuración de resorte y debe anotar esa, no la definición de pasos
@ActiveProfiles("test") @CucumberContextConfiguration @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) public class CucumberSpringConfiguration { }