2013-06-03 3 views
1

파이썬/장고로 단위 테스트를 위해 모의 노력을하고 있지만 작동하지 않습니다. 모의 행위는 한번도 부르지 않은 것처럼 행동합니다.모의 작업을 할 수 없습니다.

tests.py

from my_module import my_library 
my_library = MagicMock() 

class MyTest(TestCase): 
    def test_add(self): 
     acronym = 'TEST' 

     m = MyModel(acronym=acronym) 
     m.save() 

     my_library.add.assert_called_with(acronym=acronym) 

my_library.py

def add(acronym): 
    # Processing... 

models.py

class MyModel(Model): 
    acronym = CharField(max_length=4) 

    def save(self): 
     my_library.add(acronym=self.acronym) 

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

내 라이브러리 작품, 나는 기능 추가가 제대로이라고 알고있다.

AssertionError: Expected call: add(acronym='TEST') 
Not called 

내가 제대로 모의 것은 사용하지 않는 생각 :하지만 모의 내가 단위 테스트를 실행할 때 그냥 예외 도중 제기하기 때문에 작동하지 않습니다. 누구든지 도와 주거나 조언을 주실 수 있습니까? patch를 사용

답변

0

그것은 결코 호출되지 않기 때문입니다. 프로그램의 첫 번째 행은 다음을 수행합니다.

my_library = __import__("my_module") 

다음 줄은 첫 번째 줄에 지나치게 큽니다. 어떤 식 으로든 my_module을 변경하지 않으므로 다른 모든 코드는 모의 코드 대신 원래 코드를 호출합니다.

대신 mock.patch을 살펴보십시오. 이 같은 다음 중 하나를

from mock import patch 
import my_module as my_library 

class MyTest(TestCase): 
    def test_add(self): 
     acronym = 'TEST' 
     with patch.object(my_library, 'add') as add_method: 
      m = MyModel(acronym=acronym) 
      m.save() 
      add_method.assert_called_with(acronym=acronym) 

또는 원래 모듈 이름 사용 :

from mock import patch 

class MyTest(TestCase): 
    def test_add(self): 
     acronym = 'TEST' 
     with patch('my_module.add') as add_method: 
      m = MyModel(acronym=acronym) 
      m.save() 
      add_method.assert_called_with(acronym=acronym) 
+0

mock.patch와 함께 alecxe의 솔루션을 이미 구현하려고 시도했지만 모의이 여전히 호출되지는 않았지만 설명을 해주셔서 감사합니다. –

+0

두 번째 해결 방법을 시도한 후에도 여전히 작동하지 않습니다. 모의은 그냥 호출되지 않습니다. –

0

시도 :

from mock import patch 
from my_module import my_library 


class MyTest(TestCase): 
    def test_add(self): 
     acronym = 'TEST' 

     with patch('my_library.add') as add_method: 
      m = MyModel(acronym=acronym) 
      m.save() 

      add_method.assert_called_with(acronym=acronym) 

희망 당신을 위해 작동합니다.

+0

감사합니다,하지만이 작동하지 않습니다. 나는 같은 오류가 발생합니다 ... –

+0

다른 해결책? 몇 번이나 다시 시도했지만 여전히 작동하지 않습니다. 모의이 전혀 호출되지 않습니다. –

관련 문제