我已经进行了一系列测试,并且发现我正在类之间复制/粘贴很多代码,因此我想创建一个基类来删除它。
要有效地执行此操作,我需要使被测模块的函数能够被基类访问。看起来应该很简单,但是我发现如果子类指定一个全局变量作为要测试的函数,则基类在调用它时会将“ 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.uutFcn
的情况下呼叫self
?我尝试过通过构造函数传递值,但这引起了其他麻烦(如果那是正确的方法,我可能需要重新考虑一下。)
TIA!
答案 0 :(得分:1)
一种解决方法是在uutFcn
的定义中使用staticmethod
:
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
的签名都将保持不变。