我有一组测试,我发现我正在从一个类到另一个类复制/粘贴大量代码,所以我想创建一个基类来删除它。
为了有效地做到这一点,我需要让基类可以访问被测模块的调用函数。看起来应该很简单,但我发现如果我的子类指定一个全局变量作为要测试的函数,基类在调用它时插入“self”作为参数零,导致 TypeError: FooBar() takes exactly 2 arguments (3 given)
我的代码:
import unittest
import moduleOfFunctionsToTest as uut
class Base_Test_Class( unittest.TestCase ):
def setUp( self ):
# Common test suite setup
return
def runFcn( self ):
return self.uutFcn( "foo", self.bar )
# other common fucntions.
class TheFirstTestClass( Base_Test_Class ):
uutFcn = uut.FooBar
bar = "0"
def test_SomeCode( self ):
self.runFcn
如何在不插入 self
的情况下调用 self.uutFcn
?我试过通过构造函数传递值,但这引起了其他麻烦(如果这是正确的路径,我可能需要重新考虑。)
TIA!
最佳答案
解决它的一种方法是使用 staticmethod
在 uutFcn
的定义中:
import unittest
import moduleOfFunctionsToTest as uut
class Base_Test_Class( unittest.TestCase ):
def setUp( self ):
# Common test suite setup
return
def runFcn( self ):
return self.uutFcn( "foo", self.bar )
# other common fucntions.
class TheFirstTestClass( Base_Test_Class ):
uutFcn = staticmethod(uut.FooBar)
bar = "0"
def test_SomeCode( self ):
self.runFcn()
这是有效的,因为 staticmethod
确保给定函数始终在没有附加参数的情况下执行,无论您是通过类还是实例调用它,因此 uut.FooBar
的签名将保持不变。
关于python - 如何删除 Python 类中隐式传递的 self ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55527175/