2015-08-13 2 views
1

У меня есть небольшая проблема, чтобы высмеять мое соединение jndi в службе отдыха. Я использую jersey 1.9 для создания веб-сервиса для отдыха и mockito для моих тестов.Mock jndi connection

Мой тестовый код:

//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); 

На данный момент у меня нет anyproblem, то 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, используя эту стратегию https://blogs.oracle.com/randystuph/entry/injecting_jndi_datasources_for_junit, но мне нравится протестировать код на высоком уровне.

Если я использовал весну, было легче, чем майка, чтобы проверить обслуживание? Я спрашиваю об этом, потому что весной можно вставить jndi с помощью xml-файла.

Спасибо всем и простите мой плохой английский :( Привет

ответ

1

возвращает нуль, поскольку при настройке издеваться вы указали, что метод должен возвращать только new Comp() если она была вызвана с 2 конкретными объектами (connection и comp):

Mockito.when(db.getComponent(connection, comp)).thenReturn(new Comp()); 

Ваш comp переменный макет в тестовом коде, но в вашем без тестового кода вызова метода с реальным Comp например, я думаю, что вы на самом деле хотите, для метод RETU. rn это значение в любое время, когда оно вызывается, вы должны сделать что-то подобное;

Mockito.when(db.getComponent(any(Connection.class), any(Comp.class)).thenReturn(new Comp()); 
+0

спасибо, человек ... это работает;). У вас есть идея, которая может назвать реальный метод getComponent? Хорошо, что я получаю реальную ценность. – Nbento