2014-09-02 104 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