2

我正在開發一個項目,該項目有很多「單元測試」,它們都需要與數據庫和其他API進行交互。這些測試對我們的團隊來說是一種寶貴而有用的資源,但它們不能獨立運行,而不依賴測試環境中其他服務的功能。我個人稱之爲「功能測試」,但這只是我們團隊內已經建立的語義。如何將Python單元測試指定爲具有數據庫依賴性?

現在的問題是,現在我們已經開始向代碼中引入更多純粹的單元測試,我們有一組混合測試,它們有或沒有外部依賴關係。這些測試可以在檢查代碼後立即運行,而無需安裝或配置其他工具。他們也可以在像詹金斯這樣的持續集成環境中運行。

所以我的問題是,我怎麼能指出哪個是更清潔的分離?單元測試庫中是否有現有的裝飾器?

+0

你的測試是類,對不對?那麼如何使用繼承來分類你的測試呢?繼承基本上是「A *是a * B」。 Django會這樣做,以區分需要不同級別的數據庫訪問的測試。 – spectras

+0

標記它們很簡單 - 只需在課堂上添加一個標記即可。然而,最好的依賴於你的測試流水線。你如何執行測試?你有一套TestSuites,一個自定義選擇程序,簡單的'setup.py',...? – MisterMiyagi

回答

2

您可以定義使用skipIf裝飾器應跳過哪個測試。結合設置環境變量,您可以在某些環境中跳過測試。舉例:

from unittest import skipIf 

class MyTest(Testcase): 

    @skipIf(os.environ.get('RUNON') == 'jenkins', 'Does not run in Jenkins') 
    def test_my_code(self): 
     ... 
1

這是另一種選擇。您可以通過目錄分隔不同的測試類別。如果你想嘗試這種策略,它可能看起來像:

python -modules unit -pure unit test modules functional -other unit test modules

在您的測試管道,你可以打電話給你測試框架僅執行所需的測試。例如,對於Python的unittest,你可以運行從Python目錄內的 '純單元測試'

python -m unittest discover --start-directory ../unit

python -m unittest discover --start-directory ../functional

功能/其他單元測試此設置的一個優點是您的測試可以輕鬆分類,並且您可以在每個測試環境中執行任何腳手架或模擬的服務。有更多的Python經驗的人可以幫助您運行測試,無論當前目錄如何。

相關問題