簡體   English   中英

單元測試API包裝器

[英]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_moduleapi_func替換為模擬對象。 模擬對象記錄已完成的操作。 記住在何處打補丁很重要。 您無需修補從中導入對象的位置。 您在將要使用的位置打補丁。

  1. 您測試您的代碼是否在給定輸入下做正確的事情。 測試純函數(在函數式編程意義上是純函數)非常簡單。 您斷言給定輸入a,此函數返回輸出b。 當您的函數有很多副作用時,它會變得有些棘手。

  2. 如果您發現測試某種功能/方法太困難或太復雜,則可能意味着這是一段編寫不好的代碼。 嘗試將其分解為可測試的塊,而不是將對象傳遞給函數,而是盡可能嘗試傳遞基元。

暫無
暫無

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

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