使用云存储进行单元测试

时间:2014-09-02 10:00:11

标签: unit-testing google-app-engine

我正在撰写一些单元测试,以涵盖从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的正确方法是什么?

2 个答案:

答案 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中,相关部分如下:

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()
相关问题