Micronaut:测试失败,页面未找到,但可以通过浏览器正常访问页面
Micronaut: test is failing with Page not foun, but the page can be accessed normally via browser
我正在学习如何使用 Micronaut 创建 REST 服务,但我看不到我的测试设置有问题,无论我在我的代码中或 gradle 中做了什么更改,我总是感到烦人 'Page not found' 在 运行 测试时出现错误,但在应用程序正常 运行 时出现错误。
我在包 br.com.myproject
中有一个名为 App
的 class。在这个class中我只有main方法,如下:
public static void main(final String[] args) {
Micronaut.run(App.class);
}
在子包 br.com.myproject.controllers
中,我有一个 class 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!";
}
}
在测试目录中,我有 class HelloControllerTest
可以确保我的 /hello
端点正常工作。但不幸的是,我的测试因 PageNotFound
异常而失败。
我的class测试如下:
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 文档 (this one) 中的代码示例编写的。而且代码示例中的测试以某种方式正常工作。
例如,这些是我在这里问之前尝试过的:
- 更改了依赖项的版本以匹配代码示例中的版本:它不起作用;
- 将所有 classes 放在同一个包下 (
br.com.myproject
):它不起作用;
- Copy/paste 示例代码的 gradle 设置到我的 gradle 设置中并正确更改包名称:它不起作用;
- 打印出测试中使用的URL只是为了检查它是否正确:它是正确的,但仍然抛出'Page not found'。
一切正常,但是,当我 运行 应用程序并将地址输入浏览器时。
我用谷歌搜索了关键字 "micronaut test page not found" 和类似关键字,但没有找到任何有用的文章来帮助我修复此错误。
顺便提一下:我对 gradle 配置并不完全熟悉,因此我怀疑我可能在这里缺少一些东西。
有人知道我可能遗漏了什么吗?
感谢任何提示。
谢谢=)
查看 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's 评论并在此处回复以使其更加可见
如果您 运行 通过 IDE 进行测试,请确保在 IDE 中启用注释处理。
我正在学习如何使用 Micronaut 创建 REST 服务,但我看不到我的测试设置有问题,无论我在我的代码中或 gradle 中做了什么更改,我总是感到烦人 'Page not found' 在 运行 测试时出现错误,但在应用程序正常 运行 时出现错误。
我在包 br.com.myproject
中有一个名为 App
的 class。在这个class中我只有main方法,如下:
public static void main(final String[] args) {
Micronaut.run(App.class);
}
在子包 br.com.myproject.controllers
中,我有一个 class 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!";
}
}
在测试目录中,我有 class HelloControllerTest
可以确保我的 /hello
端点正常工作。但不幸的是,我的测试因 PageNotFound
异常而失败。
我的class测试如下:
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 文档 (this one) 中的代码示例编写的。而且代码示例中的测试以某种方式正常工作。
例如,这些是我在这里问之前尝试过的:
- 更改了依赖项的版本以匹配代码示例中的版本:它不起作用;
- 将所有 classes 放在同一个包下 (
br.com.myproject
):它不起作用; - Copy/paste 示例代码的 gradle 设置到我的 gradle 设置中并正确更改包名称:它不起作用;
- 打印出测试中使用的URL只是为了检查它是否正确:它是正确的,但仍然抛出'Page not found'。
一切正常,但是,当我 运行 应用程序并将地址输入浏览器时。
我用谷歌搜索了关键字 "micronaut test page not found" 和类似关键字,但没有找到任何有用的文章来帮助我修复此错误。
顺便提一下:我对 gradle 配置并不完全熟悉,因此我怀疑我可能在这里缺少一些东西。
有人知道我可能遗漏了什么吗?
感谢任何提示。
谢谢=)
查看 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's 评论并在此处回复以使其更加可见
如果您 运行 通过 IDE 进行测试,请确保在 IDE 中启用注释处理。