Python:知道函数是从单元测试中调用的吗?

时间:2015-11-20 20:56:07

标签: python python-2.7 python-unittest

有没有办法在Python中知道是否从单元执行或调试运行的上下文中调用了函数?

对于上下文,我正在尝试对使用执行数据库调用的函数的代码进行单元测试。为了避免在该函数测试期间的数据库调用(DB调用单独测试),我试图让DB IO函数知道它们的环境,并模拟在单元测试中调用它们并在调试期间记录其他变量运行

我目前的方法是读取/写入环境变量,但这似乎有点过分,我认为Python必须有更好的机制。

修改 以下是我尝试进行单元测试的函数示例:

<ul>
  <li>1</li>
  <li>2</li>
  <li>3</li>
  <li>4</li>
  <li>5</li>
  <li>6</li>
</ul>

1 个答案:

答案 0 :(得分:6)

在我看来,如果你在测试时编写的函数以不同的方式运行,那么你并没有真正测试它。

测试函数I&#39; d mock.patch()数据库对象,然后检查它在您的函数中是否已正确使用。

开始使用模拟库时最困难的事情是找到the correct object to replace

在您的示例中,如果在your_module中从Database_read模块导入Database_IO对象,则可以使用类似于以下的代码对其进行测试

with mock.patch('your_module.Database_read') as dbread_mock:
    # prepare the dbread_mock
    dbread_mock.return_value = 10
    # execute a test call
    retval = some_function(3, 'some range')
    # check the result
    dbread_mock.assert_called_with('some range')