Micronaut: тест не пройден, страница не создана, но доступ к странице можно получить через браузер - PullRequest
0 голосов
/ 03 декабря 2018

Я изучал, как использовать 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 примера кода в мои настройки gradleи правильное изменение имен пакетов: это не сработало;
  • Распечатайте URL-адрес, использованный в тесте, просто чтобы проверить, верен ли он: он верный, но все равно «Страница не найдена».

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

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

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

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

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

Спасибо =)

Ответы [ 2 ]

0 голосов
/ 15 августа 2019
 @Get("/")
    @Produces (MediaType.TEXT_PLAIN)
    public String index(){
        return "Hello World";
    }
0 голосов
/ 03 декабря 2018

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

 $ ./gradlew clean test

> Task :compileJava

... 

BUILD SUCCESSFUL in 4s
5 actionable tasks: 5 executed
...