首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >@MicronautTest不启动嵌入式服务器

@MicronautTest不启动嵌入式服务器
EN

Stack Overflow用户
提问于 2019-04-09 16:09:46
回答 2查看 2.1K关注 0票数 3

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

在检查代码时,我看到了Micronaut抛出此异常的以下两个原因。来自io.micronaut.test.extensions.spock.MicronautSpockExtension

代码语言:javascript
复制
    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配置是:

代码语言:javascript
复制
     <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的注释,似乎应用程序甚至都不会启动。

规范代码如下:

代码语言:javascript
复制
@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

    }
}

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

EN

回答 2

Stack Overflow用户

发布于 2019-04-11 23:59:21

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

票数 1
EN

Stack Overflow用户

发布于 2022-01-17 21:31:28

是的,将micronaut-inject-groovy添加到你的maven构建中将会解决这个问题。添加以下内容。

代码语言:javascript
复制
<dependency>
   <groupId>io.micronaut.test</groupId>
   <artifactId>micronaut-test-spock</artifactId>
   <scope>test</scope>
</dependency>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55587961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档