Программно установить весенний профиль в огурец
Я начал использовать тесты на огурец для моего приложения Spring. Я установил активный профиль Spring, передав аргумент jvm spring.profiles.active=testProfile.
Есть ли способ сделать это программно? Что-то вроде:
@RunWith(Cucumber.class)
@Cucumber.Options(...)
@ActiveProfiles("testProfile")
public class MyCucumberTest
Использование огурца 1.1.6
5 ответов
Я не уверен, что это правильный способ сделать это, но по крайней мере это поможет мне. Я использую огурец версии 1.2.4
Я специализировал бегун Junit Cucumber, чтобы установить требуемый профиль пружины в конструкторе:
public class SpringProfileCucumber extends Cucumber {
public SpringProfileCucumber(Class clazz) throws InitializationError, IOException {
super(clazz);
System.setProperty("spring.profiles.active", "testProfile");
}
}
В тесте используется раннер Junit SpringProfileCucumber
@RunWith(SpringProfileCucumber.class)
@CucumberOptions(features = {"src/test/java/tests/cucumber/test.feature"}, glue = { "tests.cucumber"})
public class MyCucumberTest {
// ... the test
}
Продолжая ответ @perseger, следующий специализированный бегун позволяет использовать аннотацию @ActiveProfiles.
public class SpringProfileCucumber extends Cucumber {
public SpringProfileCucumber(Class clazz)
throws InitializationError, IOException {
super(clazz);
ActiveProfiles ap = (ActiveProfiles) clazz
.getAnnotation(ActiveProfiles.class);
if (ap != null) {
System.setProperty("spring.profiles.active",
String.join(",", ap.value()));
}
}
}
В тесте вы можете использовать
@RunWith(SpringProfileCucumber.class)
@CucumberOptions(...)
@ActiveProfiles("testProfile")
public class RyvrTests {
}
Это становится устаревшим. Использование cucumber.xml
не применимо для огурца-JVM.
У меня похожая проблема, пытаюсь использовать:
@ActiveProfiles(value = "DEV", inheritProfiles = false)
@IfProfileValue(name= "ENV", value = "DEV")
с командной строкой:
-DENV=DEV -Dspring.active.profiles=DEV
Кажется, что эти директивы не работают с библиотекой spring-cucumber (по крайней мере, 1.1.5).
Вы можете указать переменную среды для весенней загрузки, чтобы использовать ее в качестве активного профиля. С использованием
@BeforeClass
аннотированный метод позволяет установить желаемый профиль до начала тестирования приложения
@RunWith(Cucumber.class)
@Cucumber.Options(...)
public class MyCucumberTest {
@BeforeClass
public static void setUp() {
System.setProperty("spring.profiles.active", "testProfile");
}
}
Кроме того, вы также можете создать аннотацию, чтобы активировать профиль для огурца. Это выглядит так:
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 {
}
Цитируется из моего ответа на этот вопрос: