TJ *_*dle 2 python api rest unit-testing wrapper
我正在为经过身份验证的RESTful API编写Python包装器.我现在正在编写我的测试套件(这里也是第一次测试编写者),但有一些问题:
1.a)我怎样才能打电话,但不必将凭证硬编码到测试中,因为我会把它扔到Github上?
1.b)我有点嘲笑,但不知道如何去做.这会让我不必打电话给实际的服务吗?最好的方法是什么?
2)我要测试什么 - 只要确保我的方法传递字典中的某些项目?
3)我应该遵循的任何最佳实践?
嘿TJ,如果你能告诉我你正在编写的一个函数的例子(测试中的代码,而不是测试代码),那么我可以给你一个示例测试.
一般来说:
1.a你会模拟对外部api的调用,你不是要测试他们的身份验证机制或你的互联网连接是否正常工作.您只是想测试您是否使用正确的签名调用他们的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)
Run Code Online (Sandbox Code Playgroud)
在这个例子中,我们用模拟对象替换api_func内部my_module.模拟对象记录已经完成的操作.要记住很重要的地方修补.您不修补从中导入对象的位置.您可以在将要使用它的位置对其进行修补.
您测试您的代码使用给定输入执行正确的操作.测试纯函数(纯函数编程意义上的)非常简单.断言给定输入a,此函数返回输出b.当你的函数有很多副作用时,它会变得有点棘手.
如果您发现测试某个功能/方法太难或太复杂,则可能意味着它是一段写得不好的代码.尝试将其分解为可测试的块,而不是将对象传递给函数,尝试尽可能传递基元.
| 归档时间: |
|
| 查看次数: |
2316 次 |
| 最近记录: |