2013-07-09 86 views
5

我正在寫一個perl模塊,帶有API接口,我希望把它掛在CPAN之前寫一個測試套件它。但是,由於該模塊基本上只是API的接口,所有測試都需要有效的API密鑰和用戶。很明顯,我不能在測試套件中使用我的API密鑰和用戶名來發布這個模塊,那麼處理這種事情的最佳方式是什麼?我應該在本地進行測試,然後在沒有測試的情況下將它放在CPAN上?有沒有人遇到過這個問題,並提出一個好的解決方案?我知道寫作測試是最好的練習,所以如果可以的話,我願意這樣做。謝謝!Perl的測試套件API

+0

您可以編寫和部署不需要密鑰或假密鑰的假api來測試密鑰機制。這可以通過一個環境變量與真實的api交換給那些擁有真實事物的人。 – KeepCalmAndCarryOn

+0

@KeepCalmAndCarryOn - 請參閱我的回答:) – DVK

回答

4

爲什麼不換行的API調用成小功能(例如函數什麼也不做,但API調用),然後作爲使用Test::MockObject或類似需要在嘲笑你的測試這些功能?

這甚至會更好,因爲你將能夠有一個從API測試不同的結果的測試(失敗,失敗的權威性,等...)

+1

作爲一個說明:這肯定是一個解決方案相比,更喜歡「跳過測試」之一,但不如「模擬單元測試的測試100%的非API調用代碼+讓用戶爲集成測試用例提供自己的密鑰和用戶」 – DVK

+0

這個答案也很好。您將會測試執行API返回值的位。 –

3

我做了我的文檔,我的模塊是無用沒有API密鑰清晰,使用跳躍:{}測試的結構::更多跳過所有的測試,如果關鍵是不存在的。你可以選擇bail_out而不是跳過。

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

+0

你能告訴我你的模塊的名稱,所以我可以看看它作爲一個例子嗎? – srchulo

+0

是的。給我一分鐘來查看它。我沒有在2年多的時間裏工作過:-) –

+0

https://metacpan.org/release/VendorAPI-2Checkout-Client –

2

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

這裏有一個如何從測試文件中處理這種事的例子。我們使用此爲MongoDB分佈,以檢查是否有可用的服務器針對其運行:

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

    if ([email protected]) { 
     plan skip_all => [email protected]; 
     exit 0; 
    } 
}; 

這一切確實是嘗試連接到在MONGOD環境變量指定(或其他本地主機。)主機如果可以它會跳過所有的測試,並說明原因。跳過仍然算作非故障,所以如果沒有測試服務器可用,它不會阻止模塊的安裝。

我有一個的.pm文件,我use在分發每.T文件的代碼。

+0

這也是一個很好的答案。 –