代码对于任何学习编程的人来说都是必不可少的。学习了单元测试的基础之后,我们就可以去测试一些数据库了。一些数据库和网络请求难倒了一些小伙伴。今天就来看看如何处理吧。
之前有同学问如何处理与数据库和网络请求的交互,结合我之前写单元测试的一些经验:
-
处理数据库请求:目前我看到两种方式。无论使用哪种方式,尽量保证数据在测试时插入,使用后销毁。这样的话,还是很容易构造出另一个平台的测试
,也容易在
CI 系统跑。
-
使用
fixture 类装饰器在一个 TestCase 运行前插入数据到测试数据库。大概就是 fixture 接收一个参数 sql 文件名,然后读取数据插入数据库
-
在
TestCase 的 setup 里插入数据,在 teardown 里销毁。
@fixture('table.sql')
class SomeTestCase:
pass
class SomeTestCase:
def setUp(self):
# insert value
def tearDown(self):
# destroy value
处理外部网络调用。依旧有两种方式
- 存根:用来处理一些比较通用的请求,比如一个发号人的代码
- mock:最常用的替代网络请求的方式,几乎所有场景都可以使用。个人建议所有的网络请求和rpc调用都可以使用mock.patch来模拟返回值
@registry.stub
class ZoneSeqStub(BaseStub):
def id(self):
return 'zone:///seqd'
@stub('Seq.get_id')
def get_id(self, **kwargs):
return random.randint(1, 100)
class TestCase:
@mock.patch('somemodule.request')
def test_function(self, mock_request):
mock_request.return_value = {} # 构造期望的返回值,我们默认外部调用按照约定是可以工作的,不会对其测试
这就是在单元测试中处理数据库和网络请求的方法。更多Python学习推荐:
。
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ Python基础:return和break的区别10/15
- ♥ 如何使python成为cmd中的命令?11/08
- ♥ 如何解决python和pygame不匹配的问题11/11
- ♥ python字符串中变量的使用09/09
- ♥ python中的SocketServer是什么?10/18
- ♥ 如何使用安装的python09/24
内容反馈