我正在撰写一些单元测试,以涵盖从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 :(得分: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),因为它们也依赖于本地存储并且最后检查工作正常。
答案 1 :(得分:-1)
我能够让Python单元测试工作,虽然目前不在Master上,我不得不使用commit 8f196d4。使用本地存根的最佳示例位于存储库的cloudstorage_test中,相关部分如下:
请参阅以下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()