我正在尝试为我的主.py的main()
函数
这是我的简化版主.py公司名称:
from Configuration import Configuration # Configuration.py is a file in the same dir
def main():
try:
Configuration('settings.ini')
except:
sys.exit(1) # Test path1
sys.exit(0) # Test path2
if __name__ == '__main__':
main()
在我的Unit Tests\MainUnitTests.py
中,我想导入..\Main.py
并伪造{Test path1
和{
我发现我可以用以下内容断言sys.exit()
:
但是我无法覆盖from Configuration import Configuration
有什么想法?在
到目前为止,我在Unit Tests\MainUnitTests.py
中尝试了以下操作:
class FakeFactory(object):
def __init__(self, *a):
pass
sys.modules['Configuration'] = __import__('FakeFactory')
class Configuration(FakeFactory):
pass
另一个演示示例:
在食品公司名称:
from bar import a,b
x = a()
class a(object):
def __init__(self):
self.q = 2
y = a()
print x.q, y.q # prints '1 2' as intended
b() # I want this to print 2 without modifying bar.py
在棒.py公司名称:
class a(object):
def __init__(self):
self.q = 1
def b():
t = a()
print t.q
使用导入时
它直接将名称导入模块中,因此monkeypatching}:
^{pr2}$bar
没有帮助,您需要直接在主文件中重写{要知道unittest在the ^{} subpackage 中有帮助函数,我相信您可以做一些类似的事情:
这在第一个使用
configuration
的示例中是有效的,因为需要修补的类没有在全局作用域中使用,尽管foo
在加载后立即使用bar.a
,因此您需要在加载foo
之前对其进行修补:但是在这种情况下,
foo.a
不会在with
块的末尾恢复,因为它不能被unittest捕获。。。我真的希望你的实际用例不要使用模块级别的补丁。在相关问题 更多 >
编程相关推荐