簡體   English   中英

用於API的perl測試套件

[英]perl test suite for API

我正在編寫一個與API接口的perl模塊,我想在將它放到CPAN上之前為它編寫一個測試套件。 但是,由於此模塊基本上只是API的接口,因此所有測試都需要有效的API密鑰和用戶。 顯然我無法在測試套件中使用我的API密鑰和用戶名發布此模塊,那么處理這樣的事情的最佳方法是什么? 我應該只在本地進行測試,然后在沒有測試的情況下將其放在CPAN上嗎? 有沒有人遇到過這個並想出一個好的解決方案? 我知道編寫測試是最佳實踐,所以如果可以,我想做。 謝謝!

為什么不將API調用包裝成小函數(例如函數沒有,但API調用),然后使用Test::MockObject或類似方法根據需要在測試中模擬這些函數?

這樣會更好,因為您可以使用測試來測試API的不同結果(失敗,身份驗證失敗等等)

我在我的文檔中明確表示,如果沒有API密鑰,我的模塊就沒用了,並且如果密鑰不存在,則使用skip:{}構造Test :: More來跳過所有測試。 你可以選擇太bail_out而不是跳過。

只需確保您的文檔解釋如何將API密鑰傳遞給模塊。

我處理這類事情的通常方法是需要一個環境變量才能運行測試套件。 環境變量將包含有用的信息(例如API密鑰,要連接的主機名等)

這是一個如何在測試文件中處理這類事情的示例。 我們將它用於MongoDB發行版,以檢查是否有可用的服務器運行:

BEGIN {
    eval {
        my $host = exists $ENV{MONGOD} ? $ENV{MONGOD} : 'localhost';
        $conn = MongoDB::MongoClient->new( host => $host, ssl => $ENV{MONGO_SSL} );
    };

    if ( $@ ) {
        plan skip_all => $@;
        exit 0;
    }
};

所有這一切都是嘗試連接到MONGOD環境變量(或其他localhost)中指定的主機。如果不能,它會跳過所有測試並告知原因。 跳過仍然算作非故障,因此如果沒有可用的測試服務器,它將不會阻止模塊的安裝。

我在.pm文件中有這個代碼,我在分發中的每個.t文件中use它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM