У меня есть пример приложения с сервисом:Как протестировать приложение 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());
}
}
Почему это происходит и как это исправить?