我有一个名为' com'进行低级串行通信。高级模块使用此模块进行通信。 我试图为这些模块添加适当的单元测试,但我不想让测试依赖于串行通信。 所以我需要嘲笑' com'模块,模拟来自串行通信的响应。
手动我只需更改导入行就可以了:
import mymodule.com
类似于:
import mymodule.mocked_com as com
但我知道这不是一个好方法......所以试图使用mock.patch装饰,但没有成功:
@mock.patch('mymodule.com', returns=(True, 'Test'))
def test_myfunction(capsys):
result, message = controller.myfunction('Something', 'command')
assert(result)
assert(message == 'Test')
out, err = capsys.readouterr()
由于某些原因,我从来没有从" com"返回所需的结果,但收到错误:" ValueError:需要超过0的值才能解压"。
答案 0 :(得分:2)
mock.patch
装饰器正在模拟您提供的相对路径。这意味着,如果您以这种方式导入和使用com
,则在模块X中进行测试:
import com
com.my_awesome_call()
在X模块的测试中,你应该以这种方式补丁(考虑到X在源头):
@mock.patch('X.com', ...)
def test_myfunct(mock_com):
# Boom Badaboom test things