python - 如何测试在对象实例化期间创建的函数?

标签 python unit-testing testing mocking

我正在尝试编写测试以确保我的程序在给定特定输入的情况下生成特定输出。我已经成功地模拟了我想要测试的输入,但是我一直无法模拟输出函数。我对我尝试过的事情和他们的错误留下了一些评论。我怎样才能使这些测试起作用?

这是我的测试:

from src_dir import my_class

    class Mock_Dependency:
        def __init__( self ):
            pass
        def print_stuff( self, stuff ):
            ##return MagicMock() - does not have attribute called
            return stuff

    @fixture
    @patch('src_dir.dependency.Dependency, Mock_Dependency)
    def subject():
        return my_class.My_Class()

    ##@patch('subject.print_stuff', MagicMock) - No module named subject
    ##@patch('my_class.My_Class.print_stuff', MagicMock) - does not have attribute print stuff
    def test_print_stuff_was_called( subject ):
        assert subject.print_stuff.called
    def test_print_stuff_printed( subject ):
        assert subject.print_stuff == 'a word'

这是我的课:

from dependency import Dependency

class My_Class:
  def __init__( self ):
    self.print_stuff = Dependency.print_stuff()
  def run( self ):
    self.print_stuff('a word')

最佳答案

我的问题的解决方案是在收到夹具 subject 后在测试函数中模拟 print_stuff :

def test_print_stuff_was_called( subject ):
    with patch.object(subject, 'print_stuff') as mock:
        subject.run()
    mock.assert_called_with('a word') # pass
    mock.assert_called_with('anything else') # fail

关于python - 如何测试在对象实例化期间创建的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46105041/

相关文章:

python - 将列表列转换为二维 numpy 数组

python - 如何更新 python 配置文件中的现有部分? (Python 3.6.6)

python - 如何控制 python 脚本的哪些部分以 root 身份运行

python - 为什么我不能在 numpy 中提升到负幂?

java - org.springframework.boot.test.mock.mockito.MockReset 上的 NoClassDefFoundError

unit-testing - 表驱动测试中的竞争检测

unit-testing - 使用 java 11 进行 pojo 测试

iphone - 是否有无需越狱即可自动测试 iPhone 的工具? (UI 自动化除外)

javascript - Jest 从节点模块模拟特定类

java - 如何在 Java 中测试其他 java 文件中的标准输出字符串?