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.