Micronaut: тест не пройден, страница не создана, но доступ к странице можно получить через браузер

Я изучал, как использовать Micronaut для создания служб REST, но что-то, что я не вижу, неверно в моих настройках тестов, и что бы я ни изменял в своем коде или в gradle, я всегда получаю досадную ошибку "Страница не найдена" при запуске тестов, но не когда приложение работает нормально.

У меня есть класс с именем App в упаковке br.com.myproject, В этом классе у меня есть только основной метод, а именно:

public static void main(final String[] args) {
    Micronaut.run(App.class);
}

В подпакете br.com.myproject.controllers У меня есть класс HelloController с пометкой @Get("/hello") который должен ответить с помощью одного "Hello, World!" текст, и это нормально, когда я получаю к нему доступ через браузер:

package br.com.myproject.controllers;

@Controller("/hello")
public class HelloController {

    @Get("/")
    @Produces(MediaType.TEXT_PLAIN)
    public String index() {
        return "Hello, World!";
    }

}

В каталоге тестов у меня есть класс HelloControllerTest это должно заверить меня /hello Конечная точка работает правильно. Но, к сожалению, мой тест не проходит с PageNotFound исключение.

Мой классовый тест выглядит следующим образом:

package br.com.myproject.controllers;

public class HelloControllerTest {

    private static EmbeddedServer server;
    private static HttpClient client;

    @BeforeClass
    public static void setupServer() {
        server = ApplicationContext.run(EmbeddedServer.class);
        client = server
                .getApplicationContext()
                .createBean(HttpClient.class, server.getURL());
    }

    @AfterClass
    public static void stopServer() {
        if (client != null)
            client.stop();

        if (server != null)
            server.stop();
    }

    @Test
    public void testHello() throws Exception {
        HttpRequest<String> httpRequest = HttpRequest.GET("/hello");
        String body = client.toBlocking().retrieve(httpRequest);
        Assert.assertNotNull(body);
        Assert.assertEquals(body, "Hello, World!");
    }

}

И, наконец, мои настройки Gradle:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.github.jengelman.gradle.plugins:shadow:4.0.3'
        classpath 'io.spring.gradle:dependency-management-plugin:1.0.6.RELEASE'
        classpath 'net.ltgt.gradle:gradle-apt-plugin:0.15'
    }
}

plugins {
    id 'io.spring.dependency-management' version '1.0.6.RELEASE'
    id 'com.github.johnrengelman.shadow' version '4.0.3'
    id 'application'
    id 'java'
    id 'net.ltgt.apt-idea' version '0.15'
}

group 'br.com.myproject'
version '1.0.0-SNAPSHOT'

sourceCompatibility = 1.8

repositories {
    mavenLocal()
    mavenCentral()
    maven { url "https://plugins.gradle.org/m2/" }
}

dependencies {
    annotationProcessor 'io.micronaut:micronaut-inject-java:1.0.0'

    compile 'io.micronaut:micronaut-http-client:1.0.0'
    compile 'io.micronaut:micronaut-http-server-netty:1.0.0'
    compile 'io.micronaut:micronaut-inject:1.0.0'
    compile 'io.micronaut:micronaut-runtime:1.0.0'
    compileOnly 'io.micronaut:micronaut-inject-java:1.0.0'

    runtime 'ch.qos.logback:logback-classic:1.2.3'

    testCompile 'junit:junit:4.12'
    testCompile 'io.micronaut:micronaut-inject-java:1.0.0'
}

shadowJar {
    mergeServiceFiles()
}

mainClassName = 'br.com.myproject.App'

И мои тесты, и мои настройки gradle были написаны на основе примера кода в документации Micronaut ( этот). И как-то тесты в примере кода работают правильно.

Например, вот что я пробовал, прежде чем спросить здесь:

  • Изменены версии зависимостей для соответствия версиям в примере кода: это не сработало;
  • Поместите все классы в один пакет (br.com.myproject): это не сработало;
  • Скопируйте / вставьте настройки примера кода в мои настройки gradle и правильно измените имена пакетов: это не сработало;
  • Распечатайте URL-адрес, использованный в тесте, просто чтобы проверить, является ли он правильным: он правильный, но все равно "Страница не найдена" выбрасывается.

Однако все работает нормально, когда я запускаю приложение и набираю адрес в браузере.

Я гуглил ключевые слова "тестовая страница микронавта не найдена" и аналогичные, но я не нашел полезных статей, которые помогли бы мне исправить эту ошибку.

Просто упомянуть: я не совсем знаком с конфигурацией gradle, и поэтому я подозреваю, что мне здесь чего-то не хватает.

Кто-нибудь знает, что я могу пропустить?

Я ценю любой совет.

Спасибо =)

3 ответа

Решение

Смотрите проект на https://github.com/jeffbrown/jonathansouzanotfound. Я вставил ваш код непосредственно в этот проект (и добавил пропущенные операторы импорта) и тест прошел.

 $ ./gradlew clean test

> Task :compileJava

... 

BUILD SUCCESSFUL in 4s
5 actionable tasks: 5 executed
 @Get("/")
    @Produces (MediaType.TEXT_PLAIN)
    public String index(){
        return "Hello World";
    }

Ссылается комментарий Jeff Scott Brown и ответил на него здесь, чтобы сделать его более заметным

Убедитесь, что обработка аннотаций включена в IDE, если вы запускаете тесты через IDE.

Другие вопросы по тегам