我正在尝试将 Cucumber 与 Micronaut 一起使用,但当我尝试将其与 Cucumber 一起使用时,@MicronautTest 注释根本不起作用(未注入 theApple - 请参阅下面的代码)。如果我在没有黄瓜的情况下运行它就可以了。您有这方面的经验吗?应该有效吗?
谢谢伊万
这些是课程
class1
import io.cucumber.junit.Cucumber;
import io.cucumber.junit.CucumberOptions;
import org.junit.runner.RunWith;
@RunWith(Cucumber.class)
@CucumberOptions(plugin = { "pretty" },
features = "src/test/resources"
)
public class TheRunner {
}
2类
import io.cucumber.java.en.Given;
import io.cucumber.java.en.Then;
import io.cucumber.java.en.When;
import io.micronaut.context.annotation.Value;
import io.micronaut.test.annotation.MicronautTest;
import org.junit.jupiter.api.Test;
@MicronautTest
public class Steps {
@Value("apple")
private String theApple;
// @Test
// public void test() {
// System.out.println("Value: " + theApple);
// }
@Given("some text")
public void some_method_1() {
System.out.println("Value: " + theApple);
}
@When("some text")
public void some_method_2() {
}
@Then("an alarm is raised")
public void some_method_3() {
}
}
构建.gradle
dependencies {
annotationProcessor platform("io.micronaut:micronaut-bom:$micronautVersion")
annotationProcessor "io.micronaut:micronaut-inject-java"
annotationProcessor "io.micronaut:micronaut-validation"
implementation platform("io.micronaut:micronaut-bom:$micronautVersion")
implementation "io.micronaut:micronaut-inject"
implementation "io.micronaut:micronaut-validation"
implementation "io.micronaut:micronaut-runtime"
implementation "javax.annotation:javax.annotation-api"
implementation "io.micronaut:micronaut-http-client"
runtimeOnly "ch.qos.logback:logback-classic:1.2.3"
testAnnotationProcessor platform("io.micronaut:micronaut-bom:$micronautVersion")
testAnnotationProcessor "io.micronaut:micronaut-inject-java"
testImplementation platform("io.micronaut:micronaut-bom:$micronautVersion")
testImplementation "io.micronaut.test:micronaut-test-junit5"
testImplementation "org.junit.jupiter:junit-jupiter-api:${junitVersion}"
testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:${junitVersion}"
testRuntimeOnly "org.junit.vintage:junit-vintage-engine:${junitVersion}"
testImplementation "io.cucumber:cucumber-java:$cucumberVersion"
testImplementation "io.cucumber:cucumber-junit:$cucumberVersion"
}
这是我与 Micronaut 绑定的 ObjectFactory 版本。到目前为止,它已经适用于我们项目中声明的所有 bean。
package com.myproject.libs.cucumber;
import lombok.extern.slf4j.Slf4j;
import io.cucumber.core.backend.ObjectFactory;
import io.micronaut.context.ApplicationContext;
import io.micronaut.runtime.server.EmbeddedServer;
/**
* Will start an {@link EmbeddedServer} at the start then stop it at the end of <strong>each</strong> Scenario<br>
* Will also use the {@link ApplicationContext} to resolve Glue beans
*/
@Slf4j
public final class MicronautObjectFactory implements ObjectFactory {
private EmbeddedServer embeddedServer;
@Override
public void start() {
log.info("#### Starting EmbeddedServer");
embeddedServer = ApplicationContext.run(EmbeddedServer.class, "test", "cucumber");
}
@Override
public void stop() {
if (embeddedServer != null) {
log.info("#### Stopping EmbeddedServer");
embeddedServer.stop();
}
}
@Override
public <T> T getInstance(final Class<T> beanType) {
return embeddedServer.getApplicationContext().getBean(beanType);
}
@Override
public boolean addClass(final Class<?> aClass) {
return true;
}
}
你仍然需要
- 在里面声明这个bean
resources/META-INF/services/io.cucumber.core.backend.ObjectFactory
带有简单行的文件com.myproject.libs.cucumber.MicronautObjectFactory
- (可选)还添加文件
resources/cucumber.properties
有价值观
# Cucumber properties to be applied, even when running feature's scenario manually
# https://github.com/cucumber/cucumber-jvm/tree/main/junit-platform-engine#configuration-options
cucumber.publish.quiet=true
cucumber.plugin=json:build/reports/cucumber.json
cucumber.junit-platform.naming-strategy=long
cucumber.object-factory=com.myproject.libs.cucumber.MicronautObjectFactory
package com.myproject.libs.cucumber;
import static io.cucumber.junit.platform.engine.Constants.JUNIT_PLATFORM_NAMING_STRATEGY_PROPERTY_NAME;
import static io.cucumber.junit.platform.engine.Constants.PLUGIN_PROPERTY_NAME;
import static io.cucumber.junit.platform.engine.Constants.PLUGIN_PUBLISH_QUIET_PROPERTY_NAME;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.junit.platform.commons.annotation.Testable;
import org.junit.platform.suite.api.ConfigurationParameter;
import org.junit.platform.suite.api.IncludeEngines;
import org.junit.platform.suite.api.SelectClasspathResource;
import org.junit.platform.suite.api.Suite;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Inherited
@Documented
@Testable
@Suite
@IncludeEngines("cucumber")
@SelectClasspathResource("features")
@ConfigurationParameter(key = PLUGIN_PROPERTY_NAME, value = "json:build/reports/cucumber.json")
@ConfigurationParameter(key = JUNIT_PLATFORM_NAMING_STRATEGY_PROPERTY_NAME, value = "long")
@ConfigurationParameter(key = PLUGIN_PUBLISH_QUIET_PROPERTY_NAME, value = "true")
public @interface MicronautCucumber {
}
请注意您需要的依赖项:
- io.cucumber:黄瓜-java
- io.cucumber:黄瓜-junit-平台-引擎
- org.junit.platform:junit 平台套件
- io.micronaut:micronaut-上下文
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)