2

我有一些代码要部署到使用URLFetchService. 我想使用 JUnit 来测试这段代码。根据测试文档,看来我应该有一个使用他们的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方法中调用时,返回的接口将是一个LocalURLFetchService“工作”的实例,但似乎并非如此。

  • 如何测试此代码?
  • 我错过了什么吗?(我对GAE很陌生......)
  • 我是否必须重构我的getRemoteDataUsingUrlFetch以便它不使用URLFetchServiceFactory.getURLFetchService(),因为这使得它在本地无法测试???(听起来真的很烂……)

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

4

2 回答 2

2

实际上,事实证明我的问题是未能包含文档的本地单元测试页面上提到的两个附加 jar 。RTM FTW!

  • appengine-local-runtime.jar
  • appengine-api-stubs.jar
于 2011-03-18T05:27:38.507 回答
0

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

URLFetchResponse resp = LocalURLFetchService.fetch(status, request)

getRemoteDataUsingUrlFetch(foo, bar, resp)
于 2011-03-17T08:44:56.200 回答