gpt4 book ai didi

testing - @MicronautTest 不启动嵌入式服务器

转载 作者:行者123 更新时间:2023-11-28 20:35:28 27 4
gpt4 key购买 nike

我正在使用 Micronaut 为应用程序中的 Controller 编写 Spock 测试。当使用 @MicronautTest(application=Application) 时,它会抛出异常消息 @MicronautTest used on test but no bean definition for the test present..

在检查代码时,我发现 Micronaut 抛出此异常的原因有以下 2 个。来自 io.micronaut.test.extensions.spock.MicronautSpockExtension:

    if (this.specDefinition == null) {
if (!this.isTestSuiteBeanPresent((Class)spec.getReflection())) {
throw new InvalidSpecException("@MicronautTest used on test but no bean definition for the test present. This error indicates a misconfigured build or IDE. Please add the 'micronaut-inject-java' annotation processor to your test processor path (for Java this is the testAnnotationProcessor scope, for Kotlin kaptTest and for Groovy testCompile). See the documentation for reference: https://micronaut-projects.github.io/micronaut-test/latest/guide/");
}
...
}

我的 POM 配置是:

     <plugin>
<groupId>org.codehaus.gmavenplus</groupId>
<artifactId>gmavenplus-plugin</artifactId>
<version>1.6</version>
<executions>
<execution>
<goals>
<goal>addTestSources</goal>
<goal>addSources</goal>
<goal>compileTests</goal>
<goal>compile</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>${jdk.version}</source>
<target>${jdk.version}</target>
<encoding>UTF-8</encoding>
<compilerArgs>
<arg>-parameters</arg>
</compilerArgs>
<annotationProcessorPaths>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${mapstruct.version}</version>
</path>
<path>
<groupId>io.micronaut</groupId>
<artifactId>micronaut-inject-java</artifactId>
<version>${micronaut.version}</version>
</path>
<path>
<groupId>io.micronaut</groupId>
<artifactId>micronaut-validation</artifactId>
<version>${micronaut.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
<executions>
<execution>
<id>test-compile</id>
<goals>
<goal>testCompile</goal>
</goals>
<configuration>
<compilerArgs>
<arg>-parameters</arg>
</compilerArgs>
<annotationProcessorPaths>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${mapstruct.version}</version>
</path>
<path>
<groupId>io.micronaut</groupId>
<artifactId>micronaut-inject-java</artifactId>
<version>${micronaut.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</execution>
</executions>
</plugin>

如果我没有在测试 @MicronautTest 中定义注解,应用程序似乎甚至都不会启动。

下面是规范代码:

@MicronautTest(application= Application)
@PropertySource(value = [
@Property(name='spec.name', value = 'EndpointSpec'),
@Property(name = 'endpoints.health.details-visible', value = 'ANONYMOUS'),
@Property(name = MongoSettings.EMBEDDED, value = 'true'),
])
class EndpointSpec extends Specification {

@Inject
EmbeddedServer embeddedServer
@Inject
ApplicationContext applicationContext

@Unroll
def "test health endpoint is working"() {
given: 'a RxHttpClient'
URL server = embeddedServer.getURL()
RxHttpClient client = new DefaultHttpClient(server, new DefaultHttpClientConfiguration(), '/management')

when: '/health is called'
HttpResponse response = client.toBlocking().exchange('/health')

then: 'response is 200 OK and contains valid headers'
response.status == HttpStatus.OK
response.headers.size() == 5
response.headers.contains('uber-trace-id')
response.headers.contains('Date')
response.headers.contains('content-type') && response.headers.get('content-type') == MediaType.APPLICATION_JSON
response.headers.contains('content-length')
response.headers.contains('connection')

//and: 'response contains valid HealthResult'
//HealthResult healthResult = response.body()
// Want to validate the health result here but nothing is present in body

}
}

我如何定义 specDefinition 值或标记测试以使其作为 bean 定义存在,以及出现这种行为的原因是什么。任何帮助将不胜感激。

最佳答案

Micronaut-test 使测试本身成为 bean。为了让 Groovy 测试成为一个 bean,您需要在 test 的编译路径上有 micronaut-inject-groovy

关于testing - @MicronautTest 不启动嵌入式服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55587961/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com