W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
默認(rèn)情況下,?available_apps
?是設(shè)置為 ?None
?。每次測(cè)試后,Django 都會(huì)調(diào)用 ?flush
?來重置數(shù)據(jù)庫狀態(tài)。這將清空所有表,并發(fā)出 ?post_migrate
?信號(hào),為每個(gè)模型重新創(chuàng)建一個(gè)內(nèi)容類型和四個(gè)權(quán)限。這個(gè)操作的花費(fèi)和模型的數(shù)量成正比。
將 ?available_apps
?設(shè)置為應(yīng)用程序列表會(huì)指示 Django 的行為就像只有這些應(yīng)用程序的模型是可用的一樣。?TransactionTestCase
?的行為改變?nèi)缦拢?br>
post_migrate
?在每次測(cè)試前都會(huì)被觸發(fā),以創(chuàng)建可用應(yīng)用中每個(gè)模型的內(nèi)容類型和權(quán)限,以防它們?nèi)笔А?/li>post_migrate
?并沒有被觸發(fā),它將在選擇了正確的應(yīng)用集后,由下一個(gè) ?TransactionTestCase
?觸發(fā)。由于數(shù)據(jù)庫沒有完全刷新,如果測(cè)試創(chuàng)建了沒有包含在 ?available_apps
?中的模型實(shí)例,它們就會(huì)泄漏,并可能導(dǎo)致不相關(guān)的測(cè)試失敗。小心使用了會(huì)話的測(cè)試;默認(rèn)的會(huì)話引擎將它們存儲(chǔ)在數(shù)據(jù)庫中。
由于 ?post_migrate
?在刷新數(shù)據(jù)庫后并沒有發(fā)出,所以它在一個(gè) ?TransactionTestCase
?后的狀態(tài)與一個(gè) ?TestCase
?后的狀態(tài)是不一樣的:它丟失了由 ?post_migrate
?監(jiān)聽器創(chuàng)建的行??紤]到 執(zhí)行測(cè)試的順序,這并不是一個(gè)問題,只要給定的測(cè)試套件中的所有 ?TransactionTestCase
?都聲明 ?available_apps
?,或者都沒有聲明。
?available_apps
?在 Django 自己的測(cè)試套件中是強(qiáng)制性的。
在 ?TransactionTestCase
?上設(shè)置 ?reset_sequences = True
? 將確保隊(duì)列在測(cè)試運(yùn)行前總是被重置:
class TestsThatDependsOnPrimaryKeySequences(TransactionTestCase):
reset_sequences = True
def test_animal_pk(self):
lion = Animal.objects.create(name="lion", sound="roar")
# lion.pk is guaranteed to always be 1
self.assertEqual(lion.pk, 1)
除非明確測(cè)試主鍵序列號(hào),否則建議你不要在測(cè)試中硬編碼主鍵值。
使用 ?reset_sequences = True
? 會(huì)減慢測(cè)試速度,因?yàn)橹麈I重置是一個(gè)相對(duì)昂貴的數(shù)據(jù)庫操作。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: