python - 如何删除 Python 类中隐式传递的 self ?

标签 python unit-testing inheritance

我有一组测试,我发现我正在从一个类到另一个类复制/粘贴大量代码,所以我想创建一个基类来删除它。

为了有效地做到这一点,我需要让基类可以访问被测模块的调用函数。看起来应该很简单,但我发现如果我的子类指定一个全局变量作为要测试的函数,基类在调用它时插入“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!

最佳答案

解决它的一种方法是使用 staticmethoduutFcn 的定义中:

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/

相关文章:

python - 如何在我的 Cloud-Run Flask 应用程序中获取用户的 IP 地址?

python - 更改 setuptools 下载 .egg 文件的位置

python - 通过修补 Flask 请求对 Python 包中的装饰器进行单元测试

java - 通用接口(interface)实现不起作用

python - 使用django web应用程序将csv文件导入mysql数据库

python - x in range(...) == y 在 Python 3 中是什么意思?

unit-testing - VS2010(专业版)的所有免费集成代码覆盖工具

json - 如何测试 WCF JSON 服务 - 单元测试

c++ - 避免公共(public)类中重复代码

iOS isKindOfClass 和 isMemberOfClass 的区别