Я учился использовать Micronaut для создания служб REST, но что-то, чего я не вижу, не так с настройками моих тестов, и что бы я ни менял в своем коде или в градиенте, я всегда получаю раздражающую ошибку `` Страница не найдена '' при запуске тестов, но не когда приложение работает нормально.
У меня есть класс с именем 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!");
}
}
И, наконец, мои настройки градиента:
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'
И мои тесты, и мои настройки градиента были написаны на основе примера кода в документации Micronaut (этот). И почему-то тесты в примере кода работают нормально.
Например, вот что я пробовал, прежде чем спрашивать здесь:
- Изменены версии зависимостей, чтобы они соответствовали версиям в примере кода: не работало;
- Поместите все классы в один пакет (
br.com.myproject
): не сработало; - Скопируйте / вставьте настройки градиента из примера кода в мои настройки градиента и правильно измените имена пакетов: это не сработало;
- Распечатайте URL-адрес, использованный в тесте, просто чтобы проверить, верен ли он: он правильный, но все равно выдается сообщение «Страница не найдена».
Однако все работает нормально, когда я запускаю приложение и набираю адрес в браузере.
Я искал в Google ключевые слова «тестовая страница микронавта не найдена» и аналогичные, но не нашел полезных статей, которые помогли бы мне исправить эту ошибку.
Просто упомяну: я не полностью знаком с конфигурацией gradle и поэтому подозреваю, что мне здесь чего-то не хватает.
Кто-нибудь знает, что мне может не хватать?
Я ценю любые чаевые.
Спасибо =)
App.class
, и я не вижу ссылки на это в вашем тесте. - person chrylis -cautiouslyoptimistic-   schedule 03.12.2018App.class
. Код, который он там показывает, в порядке. - person Jeff Scott Brown   schedule 03.12.2018