У меня есть файл test_gather.py
Python комбинезоны не испытывая «если имя == __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
файлы будут работать так, что последняя строка также выполняется?
Вероятная причина, по которой последняя строка не выполнена, связана с тем, что она импортируется как часть модуля и не выполняется непосредственно сама. Неужели это плохо? Тесты на нос требуют, чтобы этот оператор явно присутствовал, если вы используете весь пакет? – Makoto
Да, я могу удалить этот тест, если я не хочу запускать тесты вручную из командной строки, но думал, что может быть способ вызова покрытия, который запускает их, как если бы они выполнялись в одиночку (т. Е. Покрытие run_gather.py) – acutesoftware
Наверное, нет. Вероятность заключается в том, что он вызывает тесты с помощью других средств, которые используют собственное пространство имен '__main__', тем самым импортируя ваши тесты в виде модулей. Поэтому было бы понятно, почему они не пострадали. Я бы посоветовал вам посмотреть, как запустить индивидуальный тест из CLI с помощью набора инструментов, который вы используете, в отличие от использования элемента '__name__', поскольку это не гарантируется автоматически, как показано здесь. – Makoto