Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 模拟主___Python_Mocking_Unit Testing - Fatal编程技术网

Python 模拟主__

Python 模拟主__,python,mocking,unit-testing,Python,Mocking,Unit Testing,我希望通过测试确保: -无法导入应用程序 -该应用程序可以作为实际应用程序启动(即:pythonsrc.py) 我对此很感兴趣,为什么以下方法不起作用: src.py class A: def x(self): print('this is x') if __name__ == '__main__': A().x() test.py(代码段) 这个测试失败了。。。为什么?因为导入时模块的名称是src,而不是\uuuu main\uuuu 最简单的解决方案是将代码移动到函数中: de

我希望通过测试确保: -无法导入应用程序 -该应用程序可以作为实际应用程序启动(即:pythonsrc.py)

我对此很感兴趣,为什么以下方法不起作用:

src.py

class A:
 def x(self):
  print('this is x')

if __name__ == '__main__':
  A().x()
test.py(代码段)


这个测试失败了。。。为什么?

因为导入时模块的名称是
src
,而不是
\uuuu main\uuuu

最简单的解决方案是将代码移动到函数中:

def main():
    A().x()

if __name__ == '__main__':
    main()
在测试中,您将调用
src.main()


要测试模块是否不可导入,不需要使用模拟

只需检查导入od模块是否抛出错误

with self.assertRaises(...):
    ...

这并不能确保仅当应用程序作为脚本(python src.py)调用时才调用main(),因为您是正确的。您还可以确保在调用
main()
之前未调用它。您说过要确保无法导入模块。这可以通过我的代码进行测试。请更准确地回答您的问题,并给出有意义的评论,而不是“那不是真的……”……如果模块不可导入,Python将引发错误。这就是我猜你想测试的。你如何确保模块不可导入?!?!?!还有…如果你能保证。。。它并没有说源实际上是在main中调用的。。。
@mock.patch('src.A.x')
def test_main(self, mock_x):
    import src
    src.main()
    mock_x.assert_any_call()
with self.assertRaises(...):
    ...