2016-07-14 2 views
0

나는 이것이 쉬운 모의가되어야한다고 생각하지만, 아직 작동하지는 못했습니다. 나는 다음과 같은 디렉토리 구조의 떨어져 있어요가져온 모듈에서 기능 패치를 가져 오지 못했습니다.

:

module 
├── utilities.py 
├── order.py 
├── test 
│ ├── test_order.py 

다음과 같이 관련 코드는 다음과 같습니다

- utilities.py -

def get_file_path(order_number, file_extension): 
    # this is what I want to mock out 

- 순서를. py -

from module.utilities import get_file_path 

class Order(): 
    # ... 

    @classmethod 
    def load_order(order_number, extension): 
     file_path = get_file_path(order_number, extension) 

- test_order.py -

import unittest 
from unittest.mock import patch 
from module.order import order 

@patch('order.get_file_path') 
def mock_file(_, extension): 
    if extension == 'json': 
     return static_file_path 

class TestOrder(unittest.TestCase): 
    def test_load_order_by_number(self): 
     my_order = order.load_order(number, extension) 

파이썬으로 조롱을 시도한 것은 이번이 처음입니다. 내가 말할 수있는 것에서는 내가해야 할 일이 있지만 Orderget_file_path 일 때마다 항상 utilities.py에있는 것을 사용합니다.

  • 내가 SO에보고하려했지만 module.order.get_file_path

와 패치

  • test_load_order_by_number를 장식 내가 도움이 발견 솔루션의 없음, 그래서 난 그냥이라고 생각 :

    나는 시도 누군가가 지적 할 수있는 명백한 오류를 범하고 있습니다.

  • 답변

    0

    클래스 외부의 패치를 생성하는 것이 좋아지지 않는 것처럼 보입니다. 특정 테스트의 데코레이터로 패치를 가져 와서 작업을 시작했습니다.

    class TestOrder(unittest.TestCase): 
    
        @patch('utilities.order.get_file_path') 
        def test_load_order_by_number(self, file_mock): 
    
         def mock_get_file_path(*args, **kwargs): 
          if kwargs.get('extension', None) == 'json': 
           return static_file_path 
          return None 
    
         file_mock.side_effect = mock_get_file_path 
    
         my_order = order.load_order(number, extension) 
    
    관련 문제