2017-09-07 33 views
0

我想写一个测试,以确保我的程序生成一个特定的输出给定一个特定的输入。我已经成功地嘲笑了我想测试的输入,但是我一直无法模拟输出函数。我对我尝试过的东西和错误留下了一些评论。我怎样才能使这些测试工作?如何测试在实例化对象期间创建的函数?

这是我的测试:

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') 

回答

1

的溶液到我的问题是夹具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 
相关问题