使用GAE / J URLFetchServiceFactory.getURLFetchService()的JUnit代码测试

时间:2011-03-17 07:13:36

标签: java google-app-engine junit urlfetch

我已经部署了一些我正在部署到Google App Engine的代码 - 使用URLFetchService的Java(GAE / J)。我想用JUnit来测试这段代码。根据它出现的testing documentation,,我应该进行一项测试,使用他们的LocalURLFetchServiceTestConfig类粗略地按如下方式进行:

public class MyRemoteServiceTests {
    private static final LocalURLFetchServiceTestConfig urlConfig = new LocalURLFetchServiceTestConfig();
    private static final LocalServiceTestHelper helper = 
        new LocalServiceTestHelper(urlConfig);

    @Before
    public void setUp() throws Exception {
        service = new SampleService();
        helper.setUp();
    }

    @After
    public void tearDown() throws Exception {
        service = null;
        helper.tearDown();
    }

    @Test
    public void testThatCallsCodeThatUsesUrlFetch() {
            Object data = service.getRemoteDataUsingUrlFetch("foo", "bar");
            Assert.assertNotNull(data);
    }

}

我发现尽管使用了GAE / J文档中关于测试的“帮助”,但这个测试仍然失败:“The API package 'urlfetch' or call 'Fetch()' was not found.”。

我假设使用“帮助器”会以某种方式设置GAE环境,这样当我从URLFetchServiceFactory.getURLFetchService()方法中调用getRemoteDataUsingUrlFetch时,返回的接口将是{{1}的实例只会“工作”,但似乎并非如此。

  • 如何测试此代码?
  • 我错过了什么吗? (我对GAE很新......)
  • 我是否必须重构我的LocalURLFetchService以便它不使用getRemoteDataUsingUrlFetch因为这使得它在本地不可测试??? (这听起来真的很糟糕......)

非常感谢任何帮助/建议!

2 个答案:

答案 0 :(得分:2)

实际上,事实证明我的问题是未能在文档的Local Unit Testing页面上包含两个额外的jar。 RTM FTW!

  • 应用服务引擎和本地runtime.jar
  • 应用服务引擎的API-stubs.jar

答案 1 :(得分:0)

afaik,LocalURLFetchService不像您期望的那样配置GAE。它更像是一种从本地dev获取URL然后处理内容的方法。 (同样,即使LocalDatastoreService和LocalMemcacheService也在测试环境中的隔离空间上运行) 测试代码的一种方法是重构getRemoteDataUsingUrlFetch()以获取Url响应的内容。有点像,

URLFetchResponse resp = LocalURLFetchService.fetch(status, request)

getRemoteDataUsingUrlFetch(foo, bar, resp)