2017-09-07 62 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 
相關問題