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 を使用するサンプル プロジェクトがそこにあるかもしれません。