2016-10-05 4 views
1

У меня есть тестовый класс так же, как показано ниже:нужно издеваться неофициальный метод испытания в Django

@mock.patch('myapp.apps.mytask1.views.image_processing.apply_async') 
class SortAPITestCase(APITestCase): 


    def hit_scan("""some args"""): 
     scan_uri = 'some url' 
     data = 'some data' 
     resp = self.client.post(scan_uri, data=data) 
     id = resp.data['id'] 
     self.assertEqual(resp.status_code, 201) 
     return data, id 

    def setUp(self): 
     super(SortAPITestCase, self).setUp() 
     self.scan_data, self.id = self.hit_scan() 

    def test_1(self, mock_obj): 
     ..... 

    def test_2(self, mock_obj): 
     ..... 

В myapp.apps.mytask1.views, есть API сканирования, где есть post метод, который вызывает сельдерея задачи, как :

def post("""some args"""): 
    """ here there is a celery task that gets called""" 
    image_processing.apply_async(
     args=[img_data], queue='image', countdown=10 
    ) 

сельдерей печатает задачи из сообщения, когда его называют несколько, как показано ниже

@shared_task 
def image_processing(img_data): 
    if os.isfile(img_file): 
     print "File Not Present" 

Итак, всякий раз, когда img_file нет, он распечатывает File Not Present. Когда тестовые ошибки (с макетами) отправляются в API сканирования, это сообщение печати не выводится на консоль из-за макета. Но метод hit_scan(), когда отправляется в Scan API, затем это сообщение печатается, поскольку задача сельдерея не издевается. Могу ли я высмеивать задачу сельдерея в hit_scan ??

Итак, есть ли способ предотвратить появление заявления о печати в консоли при запуске теста?

Кстати, все тестовые примеры проходят. С этой точки зрения нет проблем. Я просто хотел, чтобы консоль выглядела лучше, только .... вместо заявлений на печать из задачи сельдерея.

Редактировать: Решил проблему. Вот что я сделал

@mock.patch('myapp.apps.mytask1.views.image_processing.apply_async') 
def hit_scan(self, mock_obj, """some args"""): 

ответ

0

Это не имеет никакого отношения к методу, находящемуся вне испытания; Python не делает такого различия. Однако ваш синтаксис для насмешек прореагирует неправильно: вам нужно ссылаться на то, что вы хотите высмеять через путь к модулю Python, а не путь к файлу.

@mock.patch('path.something.file.apply_async') 
+0

Я редактировал вопрос с помощью фактического 'mock.patch()'. Когда 'hit_scan()' вызывается в функции 'test_', он не печатает утверждение в задаче celery. Я проверил это. –

+0

То, что вы упомянули, не является проблемой. Надеюсь, вы видели мой отредактированный вопрос .. Спасибо –

+0

Спасибо ... Я решил проблему. Проверить Изменить –

 Смежные вопросы

  • Нет связанных вопросов^_^