Python и Django — ‘ModuleNotFoundError: нет модуля с именем ‘GoalCategoryTest» при попытке импортировать TestCase

#python #django

#python #django

Вопрос:

Итак, у меня есть этот TestCase файл

CategorySearchTest.py

 class CategorySearchTest(TestCase):
    @classmethod
    # Generates Test DB data to persist throughout all tests
    def setUpTestData(cls) -> None:
        cls.access_token = get_test_user_access_token()
        cls.user = get_or_create_test_user_in_DB()
        cls.goal_category_name_list = ['Health', 'Fitness', 'Art', 'Relationships', 'Artist']
 

Я пытаюсь импортировать это в init.py файл в той же папке, чтобы я мог запускать все тесты в этой папке с помощью команды python manage.py test cheerstestCategoriesTest .

мой __init__.py файл выглядит следующим образом

 from GoalCategoryTest import *
 

тогда вот моя структура папок

введите описание изображения здесь

Я получаю сообщение об ошибке из моего __init__.py файла, которое ModuleNotFoundError: No module named 'GoalCategoryTest' . Почему это происходит?

Я пробовал

 from GoalCategoryTest import *
 

и

 import GoalCategoryTest
 

также пытался

 from CategoriesTests.GoalCategoryTest import *
 

и все выдают одну и ту же ошибку.

Я также пытался

 from .GoalCategoryTest import *
 

который выдает исключение ModuleNotFoundError: No module named 'cheers.test.CategoriesTest' , которое, я думаю, относится к __init__.py файлу под cheers/test

cheers/test/__init__.py

 from cheers.test.CategoriesTests import *
from cheers.test.CreatePostTests.DeclareGoalPostTest import *
from cheers.test.CreatePostTests.JourneyTest import *
from cheers.test.CreatePostTests.PhotoTest import *
from cheers.test.CreatePostTests.UpdateGoalPostMediaTest import *
from cheers.test.CreatePostTests.UpdateGoalPostTest import *
from cheers.test.ExploreTests.ExploreFeedTest import *
from cheers.test.GoalTests.GoalTest import *
from cheers.test.HomeTests.HomeTest import *
from cheers.test.JoinGoalTests.FollowJoinGoalTest import *
from cheers.test.JoinGoalTests.JoinGoalTest import *
from cheers.test.ModifyPostTests.ModifyPostTest import *
from cheers.test.ReplyTests.CreateReplyTest import *
from cheers.test.ReplyTests.DeleteReplyTest import *
from cheers.test.ReplyTests.GetReplyTest import *
from cheers.test.SwaggerTests.SwaggerTest import *
from cheers.test.UserTests.FollowUserTest import *
from cheers.test.UserTests.GetUserInfoTest import *
from cheers.test.UserTests.UserSearchTest import *
 

Комментарии:

1. вы должны использовать это from CategoriesTests.GoalCategoryTest import *

2. @Midoki но __init__.py файл находится внутри CategoriesTests папки. Мой PyCharm linter не показывает его как возможную ссылку.

3. @Midoki Я попробовал и получил ту же ошибку ModuleNotFoundError: No module named 'CategoriesTests'

4. Примечание: если вы назвали тестовые файлы test*.py (например, например test_goals.py ), django сам найдет все тестовые примеры. Затем вы можете запустить все тесты CategorieTests пакета с помощью python manage.py test cheers.test.CategoriesTest — без необходимости импортировать все файлы в пакете __init__ . docs.djangoproject.com/en/3.2/topics/testing/overview

5. Не побочное примечание: попробуйте from cheers.test.CategoriesTest.GoalCategoryTest import * . Python не найдет GoalCategoryTest с from GoalCategoryTest import * помощью, если модуль не находится в его непосредственном пути поиска. Pycharm кажется слишком умным для своего же блага, не помечая это как проблематичное. docs.python.org/3/reference/import.html

Ответ №1:

Итак, если вы хотите иметь в своей папке разные подпапки test , которые можно запускать, вам нужно назвать все ваши тестовые файлы так test*.py , как указано в Django docs, и добавить пустой __init__.py файл в каждую папку, тогда Django test автоматически обнаружит и добавит тесты в набор тестов, что более прагматично, чем то, что я описал.делал в сообщении, когда я спросил.

https://docs.djangoproject.com/en/3.2/topics/testing/overview/
https://www.digitalocean.com/community/tutorials/how-to-add-unit-testing-to-your-django-project
https://realpython.com/testing-in-django-part-1-best-practices-and-examples/