2012-06-29 35 views
1

將App Engine SDK更新至1.7.0後,部分單元測試開始失敗。如何測試App Engine SDK 1.7.0(Java)中是否刪除了blob?

在SDK 1.6.x的我斷言,一個blob被刪除這樣的:

try { 
     fileService.getBlobFile(blobKey); 
     Assert.fail("Blob not deleted: " + blobKey); 
    } catch (FileNotFoundException expected) { 
     // OK 
    } 

在SDK 1.7.0 getBlobFile()不拋出FileNotFoundException異常了。

我試圖挑起一個例外,但沒有成功(沒有拋出異常):

try { 
     AppEngineFile blobFile = fileService.getBlobFile(blobKey); 
     boolean readable = blobFile.isReadable(); 
     FileReadChannel channel = fileService.openReadChannel(blobFile, false); 
     channel.position(1); 
     try { 
      channel.close(); 
     } catch (Exception e) { 
      // Silent 
     } 
     Assert.fail("Blob not deleted: " + blobKey); 
    } catch (Exception expected) { 
     // OK 
    } 

團塊應該被刪除,但它是可以打開的通道吧...

那麼,任何想法如何檢查刪除在單元測試中是否成功?

回答

1

嘗試使用blobstoreService.fetchData檢索文件的第一個字節。

如果文件不存在,它會拋出。

+0

這工作可靠,謝謝! –

+0

也許我在SDK中發現了一個鬆散相關的錯誤:出於某種奇怪的原因,在我的測試中,在blobstoreService.fetchData後刪除一個blob總是失敗。相反,使用fileService.openReadChannel獲取數據後刪除blob可以正常工作。 這裏的例外: 產生java.io.IOException:無法刪除:\ WEB-INF \ AppEngine上生成\ feopHbOletLHZ7BzBqXMqQ \t在com.google.appengine.api.blobstore.dev.FileBlobStorage.deleteBlob(FileBlobStorage.java :44) \t at com.google.appengine.api.blobstore.dev.LocalBlobstoreService $ 1.run(LocalBlobstoreService.java:128) –

+0

你可以在跟蹤器中打開一個問題嗎? –

0

App Engine尚不支持JDK 1.7。

+0

對不起,我還不夠清楚:關於新的App Engine SDK 1.7.0的問題,而不是Java 7.編輯這個問題,希望它有所改進。 –

+0

是的,謝謝。版本號衝突令人困惑。 –