首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >pytest:为每个测试函数设置一个mock

pytest:为每个测试函数设置一个mock
EN

Stack Overflow用户
提问于 2019-02-28 18:54:17
回答 1查看 2.8K关注 0票数 1

为python项目创建单元测试我们正在使用这种“模板”

代码语言:javascript
复制
from unittest import TestCase
from unittest.mock import patch, Mock

@patch('......dependency1')
@patch('......dependency2')
@patch('......dependencyn')
class MyTest(TestCase):

  def test_1(self, mock1, mock2, mockn):
      # setup mock1 & mock2...
      # call the subject case 1
      # assert response and/or interactions with mock1 and mock2...

  def test_2(self, mock1, mock2, mockn):
      # setup mock1 & mock2...
      # call the subject case 2
      # assert response and/or interactions with mock1 and mock2...

重点是,有时“设置”部分在一些测试用例中是重复的,所以我想将配置提取到setUp()方法中,例如,以下是伪代码:

代码语言:javascript
复制
def setUp(self):
  mock1.foo.return_value = 'xxx'
  mock2.goo.side_effect = [ ... ]

def test_1(self, mock1, mock2, mockn):
  # default setup is perfect for this test

def test_2(self, mock1, mock2, mockn):
  # this time I need...
  mock2.goo.side_effect = [ ... ]

这个想法有可能实现吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-01 08:49:18

pytestunittest都提供了您所询问的可能性,对于这两个特性,在各自的文档中用示例进行了解释:在pytest文档中查找fixture,在unittest文档中查找setup

然而,这些功能在实践中的使用很快就失去了控制,并且有创建无法阅读的测试代码的趋势。它有两种形式,一种是共享夹具设置变得太大(太通用),使得读者很难理解与特定测试用例实际相关的内容。第二,测试代码不再是自包含的,似乎神奇的事情发生在外部。Meszaros将产生的测试气味称为“模糊测试”,上面的场景称为“General Fixture”和“Mystery Guest”。

我的建议是,首选在每次测试中显式调用的辅助函数/方法。你可以有几个这样的代码,给它们起描述性的名字,这样就可以保持你的测试代码的可读性,而不需要读者首先搜索文件来找到任何“自动的”东西。在您的示例中,测试可能如下所示:

代码语言:javascript
复制
def test_1(self, mock1, mock2, mockn):
  default_setup(mock1, mock2, mockn)
  # further test code...

def test_2(self, mock1, mock2, mockn):
  default_setup(mock1, mock2, mockn)
  setup_mock2_to_behave_as_xxx(mock2)
  # further test code...

def test_3(self, mock1, mock2, mockn):
  setup_mock1_to_always_xxx(mock1)
  setup_mock2_to_behave_as_xxx(mock2)
  setup_mockn_to_xxx(mockn)
  # further test code...
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54924026

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档