2013-06-04 3 views
2

단위 테스트에서 모의 ​​구현을 시도했지만 호출해야합니다.모의이 호출되지 않았습니다

tests.py

from mock import patch 

class MyTest(TestCase): 
    def test_add(self): 
     name = 'Test' 

     with patch('my_module.my_file.my_function') as add_method: 
      m = MyModel(name=name) 
      m.save() 

     add_method.assert_called_with(name=name) 

models.py

from my_module.my_file import my_function 

class MyModel(Model): 
    name = CharField(max_length=12) 

    def save(self, *args, **kwargs): 
     my_function(self.name) 

     super(MyModel, self).save(*args, **kwargs) 

my_file.py 내가 단위 테스트를 실행하면

def my_function(name): 
    # Processing... 

, 그것은 날을 알려주는 모의가되지 않았습니다 불렀지 만 스크립트가 정상적으로 작동한다는 것을 알고 있습니다. 나에게 어떤 생각이나 조언이 있니?

답변

1

models을 가져 오면 from my_module.my_file import my_function이 실행되고 아직 조롱되지 않았습니다. 테스트 사례를 실행할 때 models 모듈의 my_function 이름은 이미 실제 함수에 바인딩되어 있습니다. 패치 my_files은 아무런 효과가 없습니다.

는 당신이 필요로하는 것은 models.my_function을 패치하는 것입니다

with patch('models.my_function') as add_method: 
    m = MyModel(name=name) 
    m.save() 

대안이 models 수입시 my_file.my_function을 패치하는 것입니다.

where to patch 설명서를 참조하십시오.

+0

대단히 감사합니다. 완벽하게 작동합니다. –

관련 문제