2014-09-02 101 views
0

我正在编写一些单元测试,以涵盖一些从GCS(Google云存储)上传和读取文件。单元测试与云存储

但很显然,这些文件没有存储在本地,但上传的,因为我得到以下错误:

<?xml version='1.0' encoding='UTF-8'?><Error><Code>AuthenticationRequired</Code><Message>Authentication required.</Message></Error> 

at com.google.appengine.tools.cloudstorage.RetryHelper.doRetry(RetryHelper.java:120) 
at com.google.appengine.tools.cloudstorage.RetryHelper.runWithRetries(RetryHelper.java:166) 
at com.google.appengine.tools.cloudstorage.RetryHelper.runWithRetries(RetryHelper.java:156) 
at com.google.appengine.tools.cloudstorage.GcsServiceImpl.createOrReplace(GcsServiceImpl.java:70) 

单元测试看起来是这样的:

private final LocalServiceTestHelper helper = new LocalServiceTestHelper(
     new LocalDatastoreServiceTestConfig().setDefaultHighRepJobPolicyUnappliedJobPercentage(1).setNoStorage(true), 
     new LocalCapabilitiesServiceTestConfig(), 
     new LocalBlobstoreServiceTestConfig(), 
     new LocalImagesServiceTestConfig() 
    ); 

    @Before 
    public void setUp() { 

     helper.setUp(); 
    } 

    @After 
    public void tearDown() { 

     helper.tearDown(); 
    } 

    @Test 
    public void someTest() { ... } 

什么是正确的方法在单元测试中本地运行GCS?

回答

0

您使用的是哪个版本的GCS客户端? GCS测试是否适合您(例如https://code.google.com/p/appengine-gcs-client/source/browse/trunk/java/src/test/java/com/google/appengine/tools/cloudstorage/GcsServiceTest.java),因为它们也取决于本地存储,并且最后检查工作正常。

+0

还没有尝试过这些测试,但发现如果我运行maven测试他们的工作。如果我在Idea中运行它们,它会因给定的错误而失败。 – Drejc 2014-09-10 11:34:02

-1

我能够得到Python单元测试的工作,虽然目前在Master上,但我不得不使用提交8f196d4。使用本地存根的最好的例子就是在信息库中的cloudstorage_test,相关部分低于:

https://github.com/GoogleCloudPlatform/appengine-gcs-client/blob/master/python/test/cloudstorage_test.py

查看关于避免问题以下Github的问题提交:

https://github.com/GoogleCloudPlatform/appengine-gcs-client/issues/21

class CloudStorageTest(unittest.TestCase): 
    """Test for cloudstorage.""" 

    def setUp(self): 
    self.testbed = testbed.Testbed() 
    self.testbed.activate() 
    self.testbed.init_app_identity_stub() 
    self.testbed.init_blobstore_stub() 
    self.testbed.init_datastore_v3_stub() 
    self.testbed.init_memcache_stub() 
    self.testbed.init_urlfetch_stub() 
    cloudstorage.set_default_retry_params(None) 

    def tearDown(self): 
    self.testbed.deactivate() 

    def testReadEntireFile(self): 
    f = cloudstorage.open(TESTFILE, 'w') 
    f.write('abcde') 
    f.close() 

    f = cloudstorage.open(TESTFILE, read_buffer_size=1) 
    self.assertEqual('abcde', f.read()) 
    f.close() 

    f = cloudstorage.open(TESTFILE) 
    self.assertEqual('abcde', f.read(8)) 
    f.close() 
+0

尽管这个链接可能回答这个问题,但最好在这里包含答案的重要部分,并提供供参考的链接。如果链接页面更改,则仅链接答案可能会失效。 - [来自评论](/ review/low-quality-posts/13894456) – Jimbou 2016-10-06 11:57:02

+0

感谢您的建议!我会编辑我的答案。 – 2016-10-09 13:24:57