Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用GAE/J URLFACHTServiceFactory.GetURLFACHTService()的代码的JUnit测试_Java_Google App Engine_Junit_Urlfetch - Fatal编程技术网

Java 使用GAE/J URLFACHTServiceFactory.GetURLFACHTService()的代码的JUnit测试

Java 使用GAE/J URLFACHTServiceFactory.GetURLFACHTService()的代码的JUnit测试,java,google-app-engine,junit,urlfetch,Java,Google App Engine,Junit,Urlfetch,我有一些代码正在部署到GoogleAppEngine-Java(GAE/J),它利用了URLFetchService。我想使用JUnit来测试这段代码。根据,我似乎应该有一个使用其LocalURLFetchServiceTestConfig类的测试,大致如下所示: public class MyRemoteServiceTests { private static final LocalURLFetchServiceTestConfig urlConfig = new LocalURLF

我有一些代码正在部署到GoogleAppEngine-Java(GAE/J),它利用了
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测试文档中建议的“helper”,但该测试仍然失败:“
未找到API包'urlfetch'或调用'Fetch()。

我假设使用“helper”会以某种方式设置GAE环境,这样当我从
getRemoteDataUsingUrlFetch
方法中调用
URLFetchServiceFactory.getURLFetchService()
时,返回的接口将是一个只会“工作”的
LocalURLFetchService
实例但情况似乎并非如此

  • 如何测试此代码
  • 我错过什么了吗?(我对盖伊还很陌生…)
  • 我是否必须重构我的
    getRemoteDataUsingUrlFetch
    ,以便它不使用
    URLFetchServiceFactory.getURLFetchService()
    ,因为这会使它在本地不稳定???(听起来真的很糟糕……)

非常感谢任何帮助/建议

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

URLFetchResponse resp = LocalURLFetchService.fetch(status, request)

getRemoteDataUsingUrlFetch(foo, bar, resp)

事实上,我的问题是没有包括文档页面上提到的另外两个JAR。RTM FTW

  • appengine-local-runtime.jar
  • appengine-api-stubs.jar

嗯。。。这就是我有点担心的。有什么好方法可以检测代码是否在“真实”GAE环境中运行,这样我就可以围绕URLFetchService编写一个简单的接口,并透明地使用适当的实现?来检测您是在开发人员还是在“真实”环境中运行环境检查系统属性var“com.google.appengine.runtime.environment”。这将是“生产”或“开发”。还要看谢谢!然而,在一个接口后面抽象不同的URL获取实现的想法似乎并不是那么简单。。。看起来他们甚至没有共享相似的方法签名。。。[link](,URLFetchRequest)“fetch-local”)结果证明我是个白痴,没有仔细阅读文档,没有注意到我需要在类路径中添加额外的jar。。。啊!请看下面我的答案。很高兴你找到了答案。我先前的回答可能偏离了目标:(