Python, один тест влияет на другой - PullRequest
1 голос
/ 05 марта 2020

Есть два теста. Сначала проверяется, регистрирует ли модуль регистрации всю информацию в файле журнала:

    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 невозможно войти.

Есть идеи, почему это происходит? Заранее спасибо;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...