2017-01-18 16 views
-1

У меня есть пример приложения с сервисом:Как протестировать приложение RESTful?

RestApp.java

import javax.ws.rs.ApplicationPath; 
import javax.ws.rs.core.Application; 

@ApplicationPath("/webapi") 
public class RestApp extends Application { 

    @Override 
    public Set<Class<?>> getClasses() { 
     final Set<Class<?>> classes = new HashSet<>(); 
     classes.add(MessageService.class); 
     return classes; 
    } 
} 

MessageService.java

import javax.ejb.Stateless; 
import javax.inject.Inject; 
import javax.ws.rs.*; 
import javax.ws.rs.core.MediaType; 
import javax.ws.rs.core.Response; 
import java.net.URI; 
import java.util.List; 

@Stateless 
@Path("/messages") 
public class MessageService { 

    @Inject 
    private MessagesManager messagesManager; 

    @GET 
    @Path("all") 
    @Produces({MediaType.APPLICATION_JSON}) 
    public List<Message> getMessages() { 
     return messagesManager.getMessages(); 
    } 
} 

и услуг зависит от одноплодной MessagesManager.java:

import javax.ejb.*; 
import javax.inject.Singleton; 

@Singleton 
@Startup 
@ConcurrencyManagement(ConcurrencyManagementType.CONTAINER) 
public class MessagesManager implements Serializable { 

    private List<Message> messages = new ArrayList<>(); 

    @Lock(LockType.READ) 
    public List<Message> getMessages() { 
     messages.add(new Message(1, "message text")); 
     return messages; 
    } 
} 

и это приложение работает нормально. Но во время теста происходит ошибка впрыска:

org.glassfish.hk2.api.UnsatisfiedDependencyException: Там не было ни одного объекта доступны для инъекции в SystemInjecteeImpl (requiredType = MessagesManager, родитель = MessageService, классификаторы = {}, позиция = -1, опциональный = ложь, само = ложь, неквалифицированный = нуль, 1232089028)

код Тест:

import org.glassfish.jersey.server.ResourceConfig; 
import org.glassfish.jersey.test.JerseyTest; 
import org.junit.Test; 
import javax.ws.rs.core.Application; 
import javax.ws.rs.core.Response; 
import static org.junit.Assert.assertEquals; 

public class RestAppTest extends JerseyTest { 

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

    @Test 
    public void testGet() { 
     final Response response = target("messages/all").request().get(); 
     assertEquals(200, response.getStatus()); 
    } 
} 

Почему это происходит и как это исправить?

ответ

-1

Вам нужно несколько вещей

1> Ну формируется структура JSON для REST API

2> Какой-REST клиента, такие как передовые REST клиент для Chrome, Mozilla и т.д., которые могут быть использованы в качестве плагин. POSTMAN также полезный инструмент

1

В Message Content Manager отсутствует MessageManager класса. Добавьте класс для настройки метода следующим образом:

return new ResourceConfig(MessageService.class, MessagesManager.class);