1

Info: My Application は、JBoss 7.1 が提供するキャッシュにいくつかの値を格納する単純な JAX-RS サービスです。

Arquillian を使用してサービスを呼び出し、応答をテストしたいと思います。残念ながら、テストを実行しようとすると、次のエラーが発生します。

java.lang.IllegalArgumentException: 
Can not set org.infinispan.manager.CacheContainer field 
com.company.DataCache.container to 
org.jboss.as.clustering.infinispan.DefaultEmbeddedCacheManager

ここに私の DataCache クラスがあります:

@ManagedBean
public class DataCache<K, V> {

  @Resource(lookup="java:jboss/infinispan/container/hibernate")
  private CacheContainer container;
  private Cache<K, V> cache;

  @PostConstruct
  public void start() {
      this.cache = this.container.getCache();
  }

  public Cache<K, V> getCache() {
      return cache;
  }
}

私のテストクラスは次のようになります。

@RunWith(Arquillian.class)
@RunAsClient
public class SyncClientServerTest extends RbmlClientServerTest {

    @Deployment(testable = false)
    public static WebArchive createDeployment() {
        MavenDependencyResolver mvnResolver = DependencyResolvers.use(MavenDependencyResolver.class).loadMetadataFromPom("pom.xml").goOffline();

        return ShrinkWrap
            .create(WebArchive.class, "cache-service.war")
            .addPackages(true, Filters.exclude(".*ClientServerTest.*"), "com/company")
            .addAsLibraries(mvnResolver.artifact("org.infinispan:infinispan-core:5.2.0.Final").resolveAsFiles())
            .addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml");
    }

    @Test
    public void testStatus() throws Exception {
        ClientRequest request = new ClientRequest("localhost:8080/cache-service/cache");
        request.accept(MediaType.APPLICATION_JSON_TYPE);
        request.body(MediaType.APPLICATION_JSON_TYPE, "");

        ClientResponse<String> responseObj = request.post(String.class);
        assertEquals(200, responseObj.getStatus());
    }
}

質問

  • @Resource は JBoss から適切なキャッシュを提供します。データベースのリソースを取得するなど、それを操作する方法はありますか?
  • getCache() のようなサービス呼び出しをモックアップする方法はありますか?

全体として、私は多くの依存性注入を使用しているため、クライアント テストに Arquilian を使用したいと考えています。@Resource と Infinispan を使用するサンプル プロジェクトがそこにあるかもしれません。

4

3 に答える 3

1

Infinispan クラスを arquillian デプロイメントと一緒にパッケージ化しますか? Infinispan はモジュールとして JBoss にバンドルされており、デプロイしなくても利用できるはずです。クラスパスにあいまいなクラス名があると、この問題が発生する可能性があります。

よろしく

1月

于 2013-05-29T07:35:20.420 に答える