5

我有几个我想对使用 Pythonrequests库的方法进行单元测试。本质上,他们正在做这样的事情:

def my_method_under_test(self):
    r = requests.get("https://ec2.amazonaws.com/", params={'Action': 'GetConsoleOutput',
            'InstanceId': 'i-123456'})
    # do other stuffs

我基本上希望能够测试它

  1. 它实际上是在发出请求。
  2. 它使用 GET 方法。
  3. 它使用了正确的参数。
  4. 等等

问题是我希望能够在不实际发出请求的情况下对其进行测试,因为它会花费太长时间并且某些操作可能具有破坏性。

我怎样才能快速轻松地模拟和测试呢?

4

1 回答 1

12

一个简单的模拟怎么样:

from mock import patch

from mymodule import my_method_under_test

class MyTest(TestCase):

    def test_request_get(self):
        with patch('requests.get') as patched_get:
            my_method_under_test()
            # Ensure patched get was called, called only once and with exactly these params.
            patched_get.assert_called_once_with("https://ec2.amazonaws.com/", params={'Action': 'GetConsoleOutput', 'InstanceId': 'i-123456'})
于 2013-05-31T21:50:01.877 回答