Модуль модульного тестирования Python выдает «ModuleNotFoundError: нет модуля с именем 'tests.test_file'»

Я пытаюсь выполнить тестовый пример для проекта, над которым я работаю. Раньше я успешно выполнял модульные тесты, но теперь это ошибка. Я точно знаю, что никаких обновлений каких-либо библиотек или изменений в Пути не было. Я попытался посмотреть исходный код и выяснить, почему он выдает ошибку, но пока не повезло. Любая помощь в этом будет оценена по достоинству.

Версия Python — 3.7.1

Пример кода ниже

import unittest

class MyTestCase(unittest.TestCase):

def test_dummy(self):
    self.assertEqual(2+2,4)

Я использовал следующую команду в cmd для выполнения теста.

C:\Users\Yadada\Desktop\repo\mwe\mwe>python -m unittest tests\test_file.py

Моя структура папок

 MWE -|
      |_tests - |
                |_test_file.py

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

strclass
ERROR: test_file (unittest.loader._FailedTest)
----------------------------------------------------------------------
ImportError: Failed to import test module: test_file
Traceback (most recent call last):
  File "C:\Users\yadada\AppData\Local\Continuum\anaconda3\lib\unittest\loader.py", line 156, in loadTestsFromName
    module = __import__(module_name)
ModuleNotFoundError: No module named 'tests.test_file'


----------------------------------------------------------------------
Ran 1 test in 0.001s

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

gold_cy 26.06.2019 23:12

Нет, у меня никогда раньше не было файла __init.py__ в том же каталоге tests, но тесты работали нормально.

Bee 26.06.2019 23:20

@aws_apprentice — я поместил пустой __init__.py файл в папку с тестами, и на удивление модульный тест теперь работает. Интересно, почему? Не могли бы вы дать краткое объяснение этому поведению, если бы могли? Если вы опубликуете это как ответ, я приму это. Спасибо

Bee 26.06.2019 23:25
stackoverflow.com/questions/448271/what-is-init-py-для объяснит лучше, чем я
gold_cy 26.06.2019 23:30

У меня тоже есть эта ошибка, __init__.py - это не требуется в Python 3.3+, если вам не нужно запускать скрипт установки в этом каталоге

boardtc 29.01.2021 19:08
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
25
5
39 621
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Проблема была решена после помещения пустого файла __init__.py в папку с тестами.

Для лучшего объяснения того, почему это сработало, обратитесь к Для чего нужен __init__.py?.

Спасибо, @aws_apprentice за помощь.

Я получаю эту ошибку в действиях github, но не локально, и это не решило ее для меня.

szeitlin 16.04.2021 00:33

В PyCharm 2020.2 ошибка «ModuleNotFoundError: No module named» также может возникать при запуске модульного теста в подпапке, которая импортирует модуль из тестируемой родительской папки. PyCharm по умолчанию использует путь сценария для выполнения теста, который не работает, например. с этой ошибкой:

ModuleNotFoundError: No module named '/home/foobar/projects/foo/mypythonproject/moduleundertest'

Решение состоит в том, чтобы отредактировать запустить конфигурацию модульного теста и изменить цель модульных тестов с «Путь сценария» на «Имя модуля».

Решение для меня состояло в том, чтобы добавить:

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

в конец моего тестового файла.

Затем я смог запустить:

python -m <test-file>

Также потребовалось удалить суффикс .py из моей команды python -m:

Подробнее см. в этот ответ.

Другие вопросы по теме