2016-01-04 3 views
5

У меня есть код, который используется в модульном тесте. Однако загружаемая им библиотека требует некоторых данных, которые на самом деле не требуются для теста носа, поскольку эти данные выводятся из строя с помощью модульного теста. Я хотел бы защитить чтение файлов в библиотеке, чтобы они не вызывались в случае теста на нос.Как проверить, выполняется ли код из теста носа?

Есть ли простой способ сделать это?

Возможно, я что-то могу сделать с помощью sys.modules или исходной командной строки, но я бы предпочел что-то более элегантное, если оно существует.

+0

Что такое * носовой тест *? – wallyk

+0

Это конкретная структура единичного теста. –

+0

как проверить, существует ли какой-либо файл, если это не так, а затем пометить код как «нос-тест» и предотвратить загрузку таких файлов. – tglaria

ответ

2

Правильный подход состоит в том, чтобы издеваться над всем кодом с побочными эффектами (я предполагаю, что вы не хотите) с пустым mocks.

Учитывая tested_module my_module:

def do_something_and_destroy_world(): 
    destroy_world() 
    return None 

Пример файла теста:

import mock 
import unittest 

import my_module 

class MyTest(unittest.TestCase): 
    def testSomethingUgly(self): 
     with mock.patch('my_module.destroy_world', return_value=None): 
      result = do_something_and_destroy_world() 
      self.assertIsNone(result) 

Когда тесты выполняются, утверждение будет правильным, и destroy_world не будет называться - вместо этого он будет получать заменен пустым макетом с фиксированным возвратным значением.

+0

Ницца. Я не думаю, что это будет хорошо работать в моем текущем коде, потому что беспорядочный код на самом деле не является методом. Если я не смогу сделать с mock.patch вокруг импорта, и даже тогда он станет беспорядочным ... Но хорошо знать, какой правильный способ сделать это в разумном коде ... –

6

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

Так, (если кто-то не дает мне лучшего ответа), я использую:

if 'nose' not in sys.modules.keys(): 
    <read the data> 
Смежные вопросы