[英]Unit testing an API wrapper
我正在為經過身份驗證的RESTful API寫一個Python包裝器。 我現在正在編寫我的測試套件(也是這里的第一次測試作家),但是有幾個問題:
1.a)我如何撥打電話,而不必將憑證硬編碼到測試中,因為我會將其扔到Github上?
1.b)我有點了解嘲笑,但不知道該怎么做。 這將使我不必致電實際服務部門嗎? 最好的方法是什么?
2)我要測試什么-僅確保我的方法在字典中傳遞某些項目?
3)我應該遵循的最佳做法是什么?
嗨,TJ,如果您可以向我展示您正在編寫的一個函數的示例(被測試的代碼,而不是測試代碼),那么我可以舉一個示例測試。
一般而言:
1.a您可以模擬對外部api的調用,而不是嘗試測試它們的身份驗證機制或您的Internet連接是否正常。 您只是想測試您是否使用正確的簽名調用了他們的api。
1.b用Python模擬是相對簡單的。 我通常使用Michael Foord編寫的模擬庫 。 pip install mock
將幫助您入門。 然后你可以做類似的事情
import unittest
from mock import call, patch
from my_module import wrapper_func
class ExternalApiTest(unittest.TestCase):
@patch('my_module.api_func')
def test_external_api_call(self, mocked_api_func):
response = wrapper_func('user', 'pass')
self.assertTrue(mocked_api_func.called)
self.assertEqual(
mocked_api_func.call_args_list,
[call('user', 'pass')]
)
self.assertEqual(mocked_api_func.return_value, response)
在此示例中,我們將my_module
的api_func
替換為模擬對象。 模擬對象記錄已完成的操作。 記住在何處打補丁很重要。 您無需修補從中導入對象的位置。 您在將要使用的位置打補丁。
您測試您的代碼是否在給定輸入下做正確的事情。 測試純函數(在函數式編程意義上是純函數)非常簡單。 您斷言給定輸入a,此函數返回輸出b。 當您的函數有很多副作用時,它會變得有些棘手。
如果您發現測試某種功能/方法太困難或太復雜,則可能意味着這是一段編寫不好的代碼。 嘗試將其分解為可測試的塊,而不是將對象傳遞給函數,而是盡可能嘗試傳遞基元。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.