Python单元测试如何测试调用另一个方法的方法

Python Unit test how to test a method which calls another method

我正在使用 python 的内置单元测试工具:unittest

class MyClass:
  def a():
    # some operations
    self.spark = SparkSession.builder.config(xxxx).getOrCreate()

如何测试此方法?

因为 a() 直接调用 SparkSession 方法。 我要如何测试它?

使用unittest.mock.patch修补SparkSession。这是一个 self-contained single-file 示例,它尽可能接近您的示例代码并生成一个通过的 pytest 结果:

SparkSession = None

class MyClass:
    def a(self):
        # some operations
        self.spark = SparkSession.builder.config('xxxx').getOrCreate()


from unittest.mock import patch

@patch('test.SparkSession')
def test_myclass_a(mock_spark_session):
    MyClass().a()

请注意,如果我没有修补 SparkSession,调用 MyClass().a() 将引发 AttributeError,因为 SparkSession 否则为 None

MyClass 在我创建的名为 test.py 的文件中定义,所以我修补了 'test.SparkSession';你应该在被测模块而不是测试模块中修补它。