2017-01-18 7 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、オプション= falseを、自己= falseを、修飾されていない=ヌル、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

あなたは必要なもののカップル

あなたのREST APIの1>まあ形成JSON構造

2>などとして使用することができ、クロム、Mozillaのなどのための高度なRESTクライアントとしてRESTクライアントのいくつかの種類プラグイン。 POSTMANも便利なツールです

1

MessageManagerクラスがアプリケーションコンテキストにありません。次のようにメソッドを構成するクラスを追加してください:

return new ResourceConfig(MessageService.class, MessagesManager.class); 
関連する問題