Rest 模拟jndi连接

Rest 模拟jndi连接,rest,junit,jersey,mockito,Rest,Junit,Jersey,Mockito,在rest服务中模拟我的jndi连接有一个小问题。我正在使用jersey 1.9为我的测试创建webservice rest和mockito 我的测试代码: //Mock DATA db = Mockito.mock(Transactions.class); Comp comp = Mockito.mock(Comp.class); Mockito.when(db.createConnection()).thenReturn(connection);

在rest服务中模拟我的jndi连接有一个小问题。我正在使用jersey 1.9为我的测试创建webservice rest和mockito

我的测试代码:

    //Mock DATA
    db = Mockito.mock(Transactions.class);

    Comp comp = Mockito.mock(Comp.class);

    Mockito.when(db.createConnection()).thenReturn(connection);
    Mockito.when(db.getComponent(connection, comp)).thenReturn(new Comp());
    Mockito.doNothing().when(connection).commit();
    Mockito.doNothing().when(connection).close();

    //Get class at the context
    configs = ConfigDatabaseTests.getInstance();
    configs.setUpClass();
    configs.bindNewSubContext("java:/comp/env/rest");
    configs.bindNewInstance(new WSCompRest(db), "java:/comp/env/rest/ws");
    webService = (WSCompRest) configs.getTheInstance("java:/comp/env/rest/ws");

    String jsonComp = "{\n"
            + "  \"comp\": {\n"
            + "    \"model\": \"XPTOXXX\",\n"
            + "    \"id\": \"TTTT\",\n"
            + "    \"type\": \"XXXXXX\"\n"
            + "  }\n"
            + "}";
    //END Mock DATA

    webService.createComp(jsonComp);
在这一点上,我没有任何问题,webService被调用,我可以调试到该方法中

@POST
@Path("/create")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public Response createComp(String comp) throws AppException {

    Response response = null;
    RequestHelper rqHelper = new RequestHelper();
    Comp com = new Comp();

    try {

        //Check parameters
        if (!rqHelper.validParameters(comp)) {
            throw new AppException(Response.Status.BAD_REQUEST.getStatusCode(), "Invalid json!!");
        }

        ...

        Connection conn = db.createConnection();

        try {

            //Get the type
            //WHYYYYYYYYY?
            comp = db.getComponent(conn, comp);
            ...
我不明白为什么方法getComponent(…)返回空实例。。。有人知道这个问题的解决方案吗? 我已经使用这个策略测试了所有的Transaction.class方法,但是我喜欢在高层测试代码

如果我使用spring,那么测试服务比jersey更容易?我对此表示怀疑,因为在spring中,可以使用xml文件注入jndi

谢谢大家,对不起,我的英语不好:(
关于

它返回null,因为在设置模拟时,您指定如果使用两个特定对象(
连接
Comp
)调用该方法,则该方法只应返回一个
新Comp()
):

您的
comp
变量在测试代码中是一个模拟变量,但在非测试代码中,您使用一个真实的
comp
实例调用该方法。我认为您实际上希望该方法在任何时候调用时都返回此值,您应该这样做

Mockito.when(db.getComponent(any(Connection.class), any(Comp.class)).thenReturn(new Comp());
谢谢你,伙计……它很管用;)。你知道谁能调用真正的getComponent方法吗?很好,我得到了一个真正的价值。
Mockito.when(db.getComponent(any(Connection.class), any(Comp.class)).thenReturn(new Comp());