我正在针对在本地 Jetty 实例上运行的 Google App Engine 项目编写集成测试。
在运行测试之前,我在http://localhost:8083
. 启动时,Web 服务会创建一个 memcached 实例,它将向其中写入数据。我们使用的是 Google Guice,所以这是通过如下所示的绑定完成的:
bind(AsyncMemcacheService.class).toInstance(MemcacheServiceFactory.getAsyncMemcacheService());
bind(MemcacheService.class).toInstance(MemcacheServiceFactory.getMemcacheService());
Web 服务启动并运行后,我将开始集成测试。至关重要的是,它们是在一个单独的 Jetty 实例上启动的,该实例创建了自己的 memcached 绑定。
我编写了一个如下所示的集成测试:
@Test(groups = "integration")
private void doSomeTest() {
//set up some precondition for the test
String id = "myIntegerObject";
this.memcached.putSomeObject(id, 0);
try {
//call an endpoint that relies on the previously set value
String url = "http://localhost:8083/api/increment/" + id;
this.http.post(url);
} catch (Exception e) {
e.printStackTrace();
Assert.fail("Test failed. See inner exception for details.", e);
}
//verify that hitting the url had the desired effect
Assert.assertEquals(this.memcached.getSomeObject(id), 1);
}
这个测试总是Assert.assertEquals(...);
在线失败,因为我的 web 服务和我的集成测试正在写入不同的 memcached 实例。
有没有办法设置我的 Web 服务、单元测试和集成测试都共享的系统范围的 memcached 实例?