2017-01-18 71 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,可选=假,自我=假,不合格= NULL,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客户端如浏览器,Mozilla等先进的REST客户端,它可以作为一个插入。 POSTMAN也是一个有用的工具

1

MessagesManager类在应用程序上下文中丢失。添加类来配置类似这样的方法:

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