2017-07-31 55 views
1

所以我有單元測試用例類和我想測試的類。這個類中有一個函數,它有一個函數用於運行我正在測試的這個方法。以可視化的問題,我會寫下面的一些抽象代碼:如何在測試類中模擬函數,而不是在單元測試的情況下

import needed_module 
from casual_class import CasualClass 

class CasualClassTests(unittest.TestCase): 

    def setUp(self): 
     self.casual_class = CasualClass() 

    def _run(self, func): 
     result = needed_module.runner(func) 
     return result 

    @mock.patch('needed_module.runner', return_value='test_run_output') 
    def test_get_that_item(self, mocked_runner): 
     result = self._run(self.casual_class.get_that_item()) 

而且測試類:

import needed_module 


class CasualClass: 

    def get_that_item(self): 
     #..some code.. 
     run_output = needed_module.runner(something) 
     return something2 

在這段代碼get_that_item代碼甚至不會運行,因爲跑步者嘲笑。我想實現的是在測試用例中運行needed_module.runner original,並在被測試的類中嘲笑一個。我已經在互聯網上搜索太久了,要解決這個問題...

回答

0

要實現這樣的任務,我必須在修補函數之前創建一個needed_module對象,並將其傳遞給測試用例中的_run函數以使用它。

class CasualClassTests(unittest.TestCase): 

    def setUp(self): 
     self.casual_class = CasualClass() 

    def _run(self, func, runner=None): 
     if not runner: 
      result = needed_module.runner(func) 
     else: 
      result = runner(func) 
     return result 

    def test_get_that_item(self, mocked_runner): 
     runner = needed_module.runner 
     with mock.patch('needed_module.runner', return_value='test_run_output'): 
      result = self._run(self.casual_class.get_that_item(), runner) 
相關問題