我对来自 Javaland 的 python 很陌生。我正在编写一些模块并想独立测试它们。其中一些依赖于其他模块中定义的函数。我想找到一种在运行测试代码时注入测试模块的轻量级方法,并使用它而不是定义这些测试的真实模块。我想出了下面的模式作为实现这一目标的一种手段。
假设我somemodule.py
定义了一个函数:
def aFunction:
return _calculate_real_value_and_do_a_bunch_of_stuff()
在foo.py
我有一个依赖于该函数的类:
import somemodule
class Foo:
def bar(self, somemodule=somemodule):
return 'bar:' + somemodule.aFunction()
在 test_foo.py 中:
import test_foo
def aFunction:
return 'test_value'
class FooTest(unittest.TestCase:
def test_bar(self):
self.assertEquals('bar:test_value',somemodule.aFunction(test_foo))
这适用于将模块注入 Foo.bar,但这是一种好习惯吗?还有其他更好的方法可以测试具有依赖关系的模块吗?
我发现代码可读性很强,并且我在函数的参数中获得了依赖列表的额外好处。我看到的唯一缺点是我对依赖注入 POV 的输入和输出有明确的依赖,somemodule
它foo.py
可能会闻到?