Я изучал, как использовать 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, и, таким образом, я подозреваю, что мне здесь чего-то не хватает.
Кто-нибудь знает, что я могу пропустить?
Я ценю любой совет.
Спасибо =)