2016-05-20 5 views
0

ジャージの残りのAPIがありますが、試してみるとセッションのデータが表示されるので失敗します。 Jerseyが検出できないセッション変数?ここでリソースメソッド内のセッションのため、ジャージの残りのテストが失敗します

は私のテストからの要求である:ここでは

User response = target("/am/users/" + userId).request().get(new GenericType<User>() { }); 

は私のリソースです:

@GET 
@Path("{userId}") 
@Produces(MediaType.APPLICATION_JSON + ";charset=utf-8") 
public User getUser(@PathParam("userId") String userId, @Context HttpServletRequest request) { 
    User supportUser = (User)request.getSession().getAttribute("USER"); // Here is where it fails. 
    User user = userDao.getUser(userId, supportUser); 
    return user; 
} 

答えて

0

問題はジャージーテストはその何かあるサーブレット環境、内部で実行されていないということですサーブレットAPIを使用する必要があります。あなたが気づいていない場合、Jerseyはサーブレットコンテナ内で実行する必要はありません。 provider-grizzly2を使用する場合、テストコンテナを設定しないと、デフォルトではGrizzlyTestContainerFactoryが実行されます。これはGrizzlyとサーブレットコンテナではなくHTTPサーバのみを起動します。

JerseyTestをサーブレットコンテナとしてコンフィグレーションするには、別の2つのメソッドconfigurDeploymentgetTestContainerFactoryをオーバーライドする必要があります。後者の場合、サーブレットコンテナを設定するGrizzlyWebTestContainerFactoryを返す必要があります。 configureDeploymentメソッドでは、アプリケーションをサーブレット・レベルで構成できます。

public class ServletTest extends JersyTest { 

    @Override 
    public ResourceConfig configure() { 
     // configure Jersey 
    } 

    @Override 
    public TestContainerFactory getTestContainerFactory() { 
     return new GrizzlyWebTestContainerFactory(); 
    } 

    @Override 
    public DeploymentContext configureDeployment() { 
     return ServletDeploymentContext 
       .forServlet(new ServletContainer(configure())) 
       .build(); 
    } 
} 

あなたがprovider-inmemoryを使用している場合は、サーブレットの展開をサポートしていませんので、あなたは桟橋プロバイダやグリズリープロバイダに切り替える必要があります。