如何处理单元测试中的请求?

python

代码对学习编程的人来说至关重要。学过单元测试基础知识后,我们就可以去测试一些数据库。一些数据库和网络的请求难住了一些小伙伴,今天我们就来一起看看怎么处理吧。


之前有同学问到如何处理和数据库的交互以及网络请求,结合自己之前写单元测试的一些经验说一下:

  • 处理数据库请求:目前我看到有两种方式。无论使用那种方式,尽量保证数据测试的时候插入,使用完成就销毁。这样换个平台依然很容易构造测试,也容易在 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


处理外部网络调用。依旧有两种方式

  • stub: 用来处理一些比较通用的请求,比如一个发号器代码

  • 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教程网

以上是 如何处理单元测试中的请求? 的全部内容, 来源链接: utcz.com/z/529179.html

回到顶部