2017-01-18 3 views
-1

Ich habe ein Anwendungsbeispiel mit einem Service:Wie RESTful-Anwendung zu testen?

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(); 
    } 
} 

und der Service ist abhängig von dem Singleton 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; 
    } 
} 

und diese App funktioniert gut. Aber während des Tests tritt Fehler der Einspritzung:

org.glassfish.hk2.api.UnsatisfiedDependencyException: Es spielt keine Rolle für die Injektion bei SystemInjecteeImpl verfügbar war (requiredType = MessagesManager, parent = MessageService, Qualifier = {}, position = -1, optional = false, selbst = false, unqualifizierte = null, 1232089028)

Prüfregeln ist:

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()); 
    } 
} 

Warum es passiert, und wie man es beheben?

Antwort

-1

Sie müssen einige Dinge

1> Well gebildet JSON Struktur für Ihren REST API

2> Irgendeine Art von REST-Client wie erweiterte REST-Client für Chrom, Mozilla etc., die als verwendet werden können, Plugin. POSTMAN ist auch ein nützliches Werkzeug

1

Die Klasse Nachrichtenmanager fehlt in einem Anwendungskontext. Fügen Sie die Klasse hinzu, um die Methode wie folgt zu konfigurieren:

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