2015-08-10 3 views
1

У меня есть файл test_gather.pyPython комбинезоны не испытывая «если имя == __main__»

import gather 

class TestGather(unittest.TestCase): 
    def test_01_gather(self): 
     self.assertEqual(len(gather.lookup_terms) > 2, True) 

if __name__ == '__main__': 
    unittest.main() 

Это работает в комбинезоне, но последняя строка никогда не будет достигнут. (https://coveralls.io/builds/3180464/source?filename=tests%2Ftest_gather.py)

Мой travis.yaml ниже:

language: python 
python: 
- "3.4" 

before_install: 
- "export DISPLAY=:99.0" 
- "sh -e /etc/init.d/xvfb start" 

install: 
- pip install . 
- pip install coverage 
- pip install nose coverage 
- pip install coveralls 

script: 
- python setup.py nosetests --with-coverage --cover-package pypiview 
- coverage run --source=rawdata setup.py test 
- nosetests --with-coverage 

after_success: 
    coveralls 

Как я могу настроить это, чтобы гарантировать, что все tests/test_*.py файлы будут работать так, что последняя строка также выполняется?

+1

Вероятная причина, по которой последняя строка не выполнена, связана с тем, что она импортируется как часть модуля и не выполняется непосредственно сама. Неужели это плохо? Тесты на нос требуют, чтобы этот оператор явно присутствовал, если вы используете весь пакет? – Makoto

+1

Да, я могу удалить этот тест, если я не хочу запускать тесты вручную из командной строки, но думал, что может быть способ вызова покрытия, который запускает их, как если бы они выполнялись в одиночку (т. Е. Покрытие run_gather.py) – acutesoftware

+1

Наверное, нет. Вероятность заключается в том, что он вызывает тесты с помощью других средств, которые используют собственное пространство имен '__main__', тем самым импортируя ваши тесты в виде модулей. Поэтому было бы понятно, почему они не пострадали. Я бы посоветовал вам посмотреть, как запустить индивидуальный тест из CLI с помощью набора инструментов, который вы используете, в отличие от использования элемента '__name__', поскольку это не гарантируется автоматически, как показано здесь. – Makoto

ответ

1

Вы используете тестовое обнаружение для поиска и запуска тестов. Вам вообще не нужно предложение if __name__. Просто удалите его.

+0

Спасибо, и спасибо @Makoto - я закончил удаление предложения if и теперь запускаю тесты вручную или все сразу. Работает хорошо – acutesoftware

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