首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >本地测试neo4j非托管扩展

本地测试neo4j非托管扩展
EN

Stack Overflow用户
提问于 2015-11-04 09:09:44
回答 2查看 225关注 0票数 0

我为neo4j 2.3.0开发了一些非托管扩展。现在我想用junit测试我的代码的功能。有没有一种方法可以在本地测试我的方法,而没有在我的pc上运行neo4j实例?

我想要这样的东西:-在执行带有数据的测试-填充实例之前创建一个neo4j的临时实例-通过rest调用我的扩展-检查结果

我已经创建了一个Neo4JTestServer类(使用了新4j-利用):

代码语言:javascript
复制
public final class Neo4jTestServer {

    public static final String EXTENSION_MOUNT_POINT = "/v1";
    public static final String EXTENSION_RESOURCES = "my.company.neo4j.extension";

    private static Neo4jTestServer INSTANCE = null;

    public static synchronized Neo4jTestServer getInstance() {
        if (INSTANCE == null) {
            INSTANCE = new Neo4jTestServer();
        }
        return INSTANCE;
    }

    private final ServerControls serverControls;

    private Neo4jTestServer() {
         serverControls = TestServerBuilders.newInProcessBuilder()
             .withExtension(EXTENSION_MOUNT_POINT, EXTENSION_RESOURCES)
             .newServer();
    }


     public ServerControls getServerControls() {
         return serverControls;
     }

     public void shutdown() {
         serverControls.close();
     }
 }

我的考试课是这样的:

代码语言:javascript
复制
public class TestResource {

private Neo4jTestServer server;

@Before
public void prepare(){
    this.server = Neo4jTestServer.getInstance();


}

@After
public void endup(){
    // Shutdown server
    this.server.shutdown();
}


@Test
public void test(){
    //TODO fill neo4j with data
    HTTP.Response response = HTTP.GET(this.server.getServerControls().httpURI().resolve("/v1/calculation/test").toString());
}
}

这是一个链接!我所用的资源。

我还检查了这里的问题!但我不明白他们是否在“真实”的neo4j实例上运行测试。

这只能在服务器上执行,还是有一种在本地运行此类测试的方法?

编辑:我总是得到一个500个响应,调用rest方法。

这是执行测试时的输出:

代码语言:javascript
复制
Nov 04, 2015 10:33:17 AM com.sun.jersey.api.core.PackagesResourceConfig init
INFORMATION: Scanning for root resource and provider classes in the packages:my.company.neo4j.extension
Nov 04, 2015 10:33:17 AM com.sun.jersey.api.core.ScanningResourceConfig logClasses
INFORMATION: Root resource classes found: class my.company.neo4j.extension.Resource
Nov 04, 2015 10:33:17 AM com.sun.jersey.api.core.ScanningResourceConfig init
INFORMATION: No provider classes found.
Nov 04, 2015 10:33:17 AM com.sun.jersey.server.impl.application.WebApplicationImpl _initiate
INFORMATION: Initiating Jersey application, version 'Jersey: 1.19 02/11/2015 03:25 AM'
Nov 04, 2015 10:33:17 AM com.sun.jersey.server.impl.application.WebApplicationImpl _initiate
INFORMATION: Initiating Jersey application, version 'Jersey: 1.19 02/11/2015 03:25 AM'
Nov 04, 2015 10:33:17 AM com.sun.jersey.server.impl.application.WebApplicationImpl _initiate
INFORMATION: Initiating Jersey application, version 'Jersey: 1.19 02/11/2015 03:25 AM'
Nov 04, 2015 10:33:17 AM com.sun.jersey.server.impl.application.WebApplicationImpl _initiate
INFORMATION: Initiating Jersey application, version 'Jersey: 1.19 02/11/2015 03:25 AM'

这是“信息:找不到提供者类”吗?也许是个问题?

编辑-这是我的扩展(它只是为了测试)

代码语言:javascript
复制
@Path("/calculation")
public class ResourceV1 {


    @Path("/test")
    @GET
    public Response test() throws Exception{
        return Response.ok().build();
    }
}

我还从临时数据库中找到了neo4j.log文件:

代码语言:javascript
复制
2015-11-04 11:52:39.876+0100 INFO  [o.n.s.d.LifecycleManagingDatabase] Successfully started database
2015-11-04 11:52:39.896+0100 INFO  [o.n.s.CommunityNeoServer] Starting HTTP on port 7474 (4 threads available)
2015-11-04 11:52:40.087+0100 INFO  [o.n.s.m.ThirdPartyJAXRSModule] Mounted unmanaged extension [my.company.neo4j.extension] at [/v1]
2015-11-04 11:52:40.156+0100 INFO  [o.n.s.w.Jetty9WebServer] Mounting static content at /webadmin
2015-11-04 11:52:40.233+0100 WARN  [o.n.s.w.Jetty9WebServer] No static content available for Neo Server at port 7474, management console may not be available.
2015-11-04 11:52:40.252+0100 INFO  [o.n.s.w.Jetty9WebServer] Mounting static content at /browser
2015-11-04 11:52:41.267+0100 INFO  [o.n.s.CommunityNeoServer] Remote interface ready and available at http://localhost:7474/
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-04 15:12:40

在建立了一个新的项目之后,我找到了解决我的问题的方法。在我的maven依赖项中,两者都有。

代码语言:javascript
复制
<dependency>
   <groupId>org.neo4j.test</groupId>
   <artifactId>neo4j-harness</artifactId>
   <version>${neo4j.version}</version>
   <scope>test</scope>
</dependency>

代码语言:javascript
复制
<dependency>
    <groupId>javax.ws.rs</groupId>
    <artifactId>javax.ws.rs-api</artifactId>
    <version>2.0</version>
    <scope>provided</scope>
</dependency>

在我的例子中,问题就在这里--在删除javax的依赖之后,testcase是成功的,我可以调用其余的方法。

编辑:在删除jax的依赖项之后,由于缺少依赖项,我无法构建扩展。

我的解决方案:添加以下依赖项,而不是javax.ws.rs-api。

代码语言:javascript
复制
<dependency>
    <groupId>org.neo4j.3rdparty.javax.ws.rs</groupId>
    <artifactId>jsr311-api</artifactId>
    <scope>provided</scope>
    <version>1.1.2.r612</version>
</dependency>

看起来,它在新4j-线束上运行得很好。

票数 0
EN

Stack Overflow用户

发布于 2015-11-04 11:50:49

你正在尝试的是

  • Neo4JTestServer类是内存中Neo4j服务器的工厂.基本上和“真实的”一样。
  • TestResource类是对扩展的简单测试。

问题可能在于如何将扩展加载到测试中。您的分机在包名"my.company.neo4j.extension“中吗?

你能给我们看看你的分机代码吗?

我的建议如下

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33517722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档