我即將着手開發一些基於Python的大型App Engine項目,我認爲在提交單元測試策略之前,我應該檢查Stack Overflow的「人羣智慧」。我有一個現有的單元測試框架(基於unittest,具有自定義的選項和擴展名),所以任何「重量級」/「侵入性」的東西如nose,webtest或gaeunit似乎都不合適。在我的世界觀中,重要的單元測試是非常輕量級和快速的,在極短的時間內運行,所以我可以不停地運行它們,而不會影響我的開發節奏(例如,對於不同的項目,我可以一個20K線項目的覆蓋率達到了97%左右,其中有幾十次超快速測試,總體運行時間爲5-7秒,這是一個典型的運行時間 - 這就是我認爲的一個體面的小型快速單元測試套件,測試)。我會有更豐富/更重的測試,當然還有通過硒或風車進行集成測試,這是不是我問的是什麼;-) - 我關注這個問題(以及我的大多數開發工作;-)是在小而輕的單元測試中輕輕地超快地覆蓋我的代碼,而不是更深的代碼。您在App Engine上使用了哪些輕量級Python單元測試?
所以,我認爲我需要什麼本質上是一組不同的關鍵應用程序引擎子系統的小,非常輕便模擬 - 數據存儲,內存緩存,請求/響應對象和調用Web應用程序處理,用戶處理,郵件,& c,大致按照這種優先順序。我還沒有找到我正在尋找的東西,所以在我看來,我應該依靠mox,就像我過去經常做的那樣,這基本上意味着嘲笑在給定測試中使用的每個子系統,並設置所有的期望& c(強,但每次都有很多工作,並且對被測試代碼的內部非常敏感,即非常「白匣子」),或者滾動我自己對每個子系統的模擬(並且在模擬的子系統上進行斷言'作爲單元測試的一部分)。鑑於GAE的Python端強大的「存根」架構,後者似乎是可行的,但我不相信我需要推出自己的,也就是說,沒有人已經寫過這種頭腦簡單的模擬器!)例如,對於數據存儲,它看起來像我所需要的或多或少是已經是SDK一部分的「存檔數據存儲」存根(stub),另外還有一種方法來標記它是隻讀和易於使用的訪問器,用於斷言關於數據存儲的狀態;子系統 - 每個子系統似乎都需要比SDK中的「多一點」,「位於現有」存根「架構之上」。因此,在潛入並花費一兩天寶貴的開發時間爲單元測試目的「滾動我自己的」GAE子系統模擬之前,我想我會仔細檢查一下SO人羣,看看你們是什麼樣的人羣想想這個...或者,如果已經有一些現有的這類模擬器的開源集合,我可以簡單地重複使用(或者最小化調整!),並且我在搜索時沒有發現它們! - )
編輯:澄清,如果我確實推出我自己的產品,我打算在可行的情況下利用SDK提供的存根;但是例如,對於最初從文件讀入但最終未保存的數據存儲沒有存根,因此我需要對現有的存根進行子類化和調整(它也不提供特別方便的方法來對其進行斷言狀態 - 與郵件服務存根相同,等等)。這就是我所說的「我自己的滾動」 - 不是「從頭開始重寫」 - )
編輯:「爲什麼不GAEUnit」 - GAEUnit是自己的使用情況不錯,但運行dev_appserver,看到導致我的瀏覽器(甚至通過urllib。urlopen)絕對不是我所追求的 - 我想使用一個完全自動化的設置,適合在基於擴展unittest的現有測試運行框架內運行,並且沒有HTTP方式(所述框架定義了「快速「的測試,除了其他的東西沒有套接字和最小的磁盤I/O - 我們模擬或模擬這些 - 所以通過gaeunit我可以沒有比」中等「測試更好)+沒有方便的方式預填充每個數據存儲測試(並且沒有OO結構來幫助定製事物)。
2014年人羣意見是什麼? – andruso 2014-02-16 08:31:37
@andrusr多年來我一直很開心地使用'google.appengine.ext.testbed'。 – 2015-01-04 20:06:45