我正在使用NoseGAE爲我的App Engine應用程序編寫本地單元測試,但某些測試突然出現問題。我有標準的setUp和tearDown函數,但是有一個測試似乎因爲我無法辨別的原因而中斷。即使是陌生人,setUp和tearDown也不會每次都被調用。我添加了全局變量來計算setUp/tearDown調用,並且在我的第四個測試(現在看起來已經損壞的測試)上,setUp被調用了兩次,而tearDown被調用了一次。此外,當我通過id查詢它時,第三個測試中的一個對象存在,但不存在於其類型的一般查詢中。下面是一些代碼,讓奇異的畫面:App Engine + NoseGAE怪異破損測試
class GameTest(unittest.TestCase):
def setUp(self):
self.testapp = webtest.TestApp(application)
self.testbed = testbed.Testbed()
self.testbed.activate()
self.testbed.init_datastore_v3_stub(
consistency_policy=datastore_stub_util.PseudoRandomHRConsistencyPolicy(probability=1),
require_indexes=True,
root_path="%s/../../../" % os.path.dirname(__file__)
)
def tearDown(self):
self.testbed.deactivate()
self.testapp.cookies.clear()
def test1(self):
...
def test2(self):
...
def test3(self):
...
# I create a Game object with the id 123 in this particular test
Game(id=123).put()
...
def test4(self):
print "id lookup: ", Game.get_by_id(123)
print "query: ", Game.query().get()
self.assertIsNone(Game.get_by_id(123))
這是測試的抽象,但足以說明問題。
第4次測試失敗,因爲它聲稱具有該ID的對象不存在。當我打印出來的兩個語句:
ID查找:遊戲(鍵=鍵( '遊戲',123))
查詢:無
的ID查找顯示TEST3創建的對象,但查詢查詢是EMPTY。這對我來說絕對沒有意義。此外,我100%肯定測試工作在早些時候。有誰知道這甚至有可能嗎?我可能有一些本地損壞的文件導致問題?
我從來沒有能夠使用NDB正常工作,除非我使用--with-sandbox運行nosetests。它以奇怪和混亂的方式失敗,看起來沒有一貫的理由......我希望有人能夠給出一個體面的答案,但嘗試這個選擇可能會幫助你。 – Greg
感謝格雷格,但我應該提到,我已經用該標誌運行它。 –
這是一種期望的行爲,假設「PseudoRandomHRConsistencyPolicy」的概率設置爲<1。您是否可以斷言您的策略是按照您的預期啓動的? – Josh