Есть два теста. Сначала проверяется, регистрирует ли модуль регистрации всю информацию в файле журнала:
def test_logging_into_many_modules(self):
"""Assure logger is properly used in many files"""
run(1, 1, False)
with open("darwin.log") as log_file:
content = log_file.read()
# Check if log takes place in main modules
self.assertIn("libs.population", content)
self.assertIn("libs.individual", content)
self.assertIn("libs.mutation", content)
self.assertIn("libs.selection", content)
self.assertIn("libs.chromosome", content)
self.assertIn("libs.crossover", content)
run()
метод просто выполняет всю мою программу.
Также у меня есть тест для достижения 100% покрытия тестом. Я тестирую if __name__ == '__main__'
блок в основном исполняемом файле darwin.py
:
if __name__ == "__main__":
main()
Этот тест:
@mock.patch("darwin.run")
@mock.patch("argparse.ArgumentParser.parse_args")
def test__name____main__(self, mock_argparse, mock_run):
"""Test if __name__ == '__main__' block code is executed."""
mock_argparse.return_value = argparse.Namespace(
populationSize=1, numberOfIterations=1, sendMail=False)
loader = importlib.machinery.SourceFileLoader("__main__", "darwin.py")
mod = types.ModuleType(loader.name)
loader.exec_module(mod)
with open("darwin.log") as log_file:
content = log_file.read()
self.assertIn("__main__", content)
Я запускаю тесты с использованием библиотеки pytest
. Pytest запускает тесты в алфавитном порядке, поэтому test__name__main
будет проверен первым. Если я запускаю эти тесты отдельно, все оба проходят. Также, если тестовый порядок test_logging_into_many_modules
первый и test__name__main__
второй - все работает как положено. Проблема в том, что когда test__name__main__
выполняется первым, он каким-то образом отрывает FileHandler
от модуля ведения журнала, и в файл darwin.log
невозможно войти.
Есть идеи, почему это происходит? Заранее спасибо;)