Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaREST服务器:进行单元测试_Java_Rest_Unit Testing - Fatal编程技术网

JavaREST服务器:进行单元测试

JavaREST服务器:进行单元测试,java,rest,unit-testing,Java,Rest,Unit Testing,我尝试对独立的rest服务器进行单元测试。如果我运行rest服务器,它工作得很好。但我不知道如何让UnitTest运行 我的主要班级: public class Main { private static final int DEFAULT_PORT = 8080; private final int serverPort; private final Server restServer; public Main(final int serverPort) throws Exception {

我尝试对独立的rest服务器进行单元测试。如果我运行rest服务器,它工作得很好。但我不知道如何让UnitTest运行

我的主要班级:

public class Main {

private static final int DEFAULT_PORT = 8080;
private final int serverPort;
private final Server restServer;
public Main(final int serverPort) throws Exception {
    this.serverPort = serverPort;

    restServer = configureServer();
    restServer.start();
    restServer.join();
}

public void close() throws Exception {
    if (restServer != null) {
        restServer.stop();
    }
}

private Server configureServer() {
    ResourceConfig resourceConfig = new ResourceConfig();
    resourceConfig.packages(Main.class.getPackage().getName());
    resourceConfig.register(JacksonFeature.class);
    ServletContainer servletContainer = new ServletContainer(resourceConfig);
    ServletHolder sh = new ServletHolder(servletContainer);
    Server server = new Server(serverPort);
    ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
    context.setContextPath("/");
    context.addServlet(sh, "/*");
    server.setHandler(context);
    return server;
}

public static void main(String[] args) throws Exception {
    int serverPort = DEFAULT_PORT;
    if (args.length >= 1) {
        try {
            serverPort = Integer.parseInt(args[0]);
        } catch (NumberFormatException e) {
            e.printStackTrace();
        }
    }

    new Main(serverPort);
}
资源类:

@Path("builder")
public class ReportBuilderResource {

    @POST
    @Path("/build")
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces({MediaType.TEXT_PLAIN})
    public String makeReport(final ReportDescription reportDescription) {
        return reportDescription.getName();
    }
}
我的单元测试类:

public class ReportBuilderResourceTest extends JerseyTest {

@Override
public AppDescriptor configure() {
    return new WebAppDescriptor.Builder()
            .initParam(WebComponent.RESOURCE_CONFIG_CLASS, ClassNamesResourceConfig.class.getName())
            .initParam(ClassNamesResourceConfig.PROPERTY_CLASSNAMES, ReportBuilderResource.class.getName())
            .build();
}

@Test
public void testBuildReport() throws Exception {
    System.out.println("Test Build Report");
    ReportDescription reportDescription = new ReportDescription();

    JSONObject jsonObject = new JSONObject(reportDescription);
    resource().path("builder/").post(jsonObject.toString());
}
和输出日志:

juil. 31, 2015 9:48:53 AM com.sun.jersey.test.framework.spi.container.inmemory.InMemoryTestContainerFactory$InMemoryTestContainer <init>
INFO: Creating low level InMemory test container configured at the base URI http://localhost:9998/
Running com.fdilogbox.report.serveur.ReportBuilderResourceTest
juil. 31, 2015 9:48:53 AM com.sun.jersey.test.framework.spi.container.inmemory.InMemoryTestContainerFactory$InMemoryTestContainer start
INFO: Starting low level InMemory test container
juil. 31, 2015 9:48:53 AM com.sun.jersey.server.impl.application.WebApplicationImpl _initiate
INFO: Initiating Jersey application, version 'Jersey: 1.19 02/11/2015 03:25 AM'
Test Build Report
juil. 31, 2015 9:48:54 AM com.sun.jersey.api.container.filter.LoggingFilter filter
INFO: 1 * Server in-bound request
1 > POST http://localhost:9998/builder/
1 > Content-Type: text/plain
1 > 
{"name":null,"report":null}

juil. 31, 2015 9:48:54 AM com.sun.jersey.api.container.filter.LoggingFilter$Adapter finish
INFO: 1 * Server out-bound response
1 < 405
1 < Allow: OPTIONS
1 < 

Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.497 sec <<< FAILURE! - in com.fdilogbox.report.serveur.ReportBuilderResourceTest
testBuildReport(com.fdilogbox.report.serveur.ReportBuilderResourceTest)  Time elapsed: 0.496 sec  <<< ERROR!
com.sun.jersey.api.client.UniformInterfaceException: Client response status: 405
    at com.sun.jersey.api.client.WebResource.voidHandle(WebResource.java:709)
    at com.sun.jersey.api.client.WebResource.post(WebResource.java:238)
    at com.fdilogbox.report.serveur.ReportBuilderResourceTest.testBuildReport(ReportBuilderResourceTest.java:47)
juil。2015年9月31日上午9:48:53 com.sun.jersey.test.framework.spi.container.inmemory.InMemoryTestContainer工厂$InMemoryTestContainer
信息:创建在基本URI上配置的低级别InMemory测试容器http://localhost:9998/
正在运行com.fdilogbox.report.serveur.ReportBuilderResourceTest
尤尔。2015年9月31日上午9:48:53 com.sun.jersey.test.framework.spi.container.inmemory.InMemoryTestContainer工厂$InMemoryTestContainer开始
信息:启动低级别内存测试容器
尤尔。2015年9月31日上午9:48:53 com.sun.jersey.server.impl.application.WebApplicationImpl\u
信息:启动泽西岛应用程序,版本“泽西岛:1.19 02/11/2015 03:25 AM”
测试构建报告
尤尔。2015年9月31日上午9:48:54 com.sun.jersey.api.container.filter.LoggingFilter
信息:1*绑定请求中的服务器
1>职位http://localhost:9998/builder/
1>内容类型:文本/纯文本
1 > 
{“name”:null,“report”:null}
尤尔。2015年9月31日上午9:48:54 com.sun.jersey.api.container.filter.LoggingFilter$适配器完成
信息:1*服务器外部绑定响应
1 < 405
1<允许:选项
1 < 
测试运行:1,失败:0,错误:1,跳过:0,所用时间:0.497秒您的资源侦听“/builder”,但其中唯一的方法侦听“/builder/build”。由于没有监听@post和“/builder”的方法,因此得到了一个Http 405-不允许使用的方法

您可以从“makeReport”方法中删除@Path(“/build”),也可以更改resource().Path(“builder/build”)。。。在你的测试中

顺便说一句:

您只需输入和此代码段即可使用Jersey 2运行单元测试:

public class ReportBuilderResourceTest extends JerseyTest {

 @Override
 protected Application configure() {
     return new ResourceConfig(ReportBuilderResource.class);
 }
...
}
您的资源侦听“/builder”,但其中唯一的方法侦听“/builder/build”。由于没有监听@post和“/builder”的方法,因此得到了一个Http 405-不允许使用的方法

您可以从“makeReport”方法中删除@Path(“/build”),也可以更改resource().Path(“builder/build”)。。。在你的测试中

顺便说一句:

您只需输入和此代码段即可使用Jersey 2运行单元测试:

public class ReportBuilderResourceTest extends JerseyTest {

 @Override
 protected Application configure() {
     return new ResourceConfig(ReportBuilderResource.class);
 }
...
}

我使用Jetty服务器(V9.2.12)和jersey(V2.19)。我在内存中依赖jersey测试框架,但如果我使用您的代码,我会出现编译错误:com/fdilogbox/report/serveur/ReportBuilderResourceTest.java:[22,27]com.fdilogbox.report.serveur.ReportBuilderResourceTest中的configure()也不能使用jersey 2.19覆盖com.sun.jersey.test.framework.JerseyTestIm中的configure()。我没有那个消息?!发现了一些东西:也许你在混合图书馆?Jersey 2.19现在是Glassfish,因此应该是org.Glassfish.Jersey.test.JerseyTest而不是com.sun.Jersey.test.framework.JerseyTestI使用Jetty服务器(V9.2.12)和Jersey(V2.19)。我在内存中依赖jersey测试框架,但如果我使用您的代码,我会出现编译错误:com/fdilogbox/report/serveur/ReportBuilderResourceTest.java:[22,27]com.fdilogbox.report.serveur.ReportBuilderResourceTest中的configure()也不能使用jersey 2.19覆盖com.sun.jersey.test.framework.JerseyTestIm中的configure()。我没有那个消息?!发现了一些东西:也许你在混合图书馆?Jersey 2.19现在是Glassfish,所以它应该是org.Glassfish.Jersey.test.JerseyTest,而不是com.sun.Jersey.test.framework.JerseyTest