Ошибка Pytest assertEqual для одного и того же класса с разными относительными путями

#python #pytest #python-unittest

Вопрос:

Я запускаю несколько тестов для функции, целью которой является получение дочернего класса объекта (вызываемого Parameter ) на основе строки, возвращаемой из атрибута Parameter дочернего класса param_name . Тест определен ниже:

 @pytest.mark.parametrize('param_string, expected_result', [  ('Zip Code', p.ZipCode),  ('Property Type', p.PropertyType) ]) def test_check_class_from_param_string(param_string, expected_result):  assert utils.check_class_from_param_string(param_string) == expected_result  

Функция check_class_from_param_string определена ниже:

 def check_class_from_param_string(param):  '''  Given a parameter string, pair it up with  a Parameter child class.   :param str param: the param_name of a Parameter child class  :return: the Parameter child class that matches the string  :rtype: Parameter child class or None  '''  # Iterate through the list of Parameter child classes  for c in PARAMETERS:  # If the name matches the class's name, return the class  if c.param_name == param:  return c  return None  

Несмотря на то, что я знаю, что этот тест должен пройти, это не так, потому ZipCode PropertyType что классы и имеют несколько разные относительные пути в соответствии с Pytest. Ниже приведен результат теста:

 FAILED testing/test_utils.py::test_check_class_from_param_string[Zip Code-ZipCode] - AssertionError: assert lt;class 'parameters.ZipCode'gt; == lt;class 'project.parameters.ZipCode'gt; FAILED testing/test_utils.py::test_check_class_from_param_string[Property Type-PropertyType] - AssertionError: assert lt;class 'parameters.PropertyType'gt; == lt;class 'project.parameters.PropertyType'gt;  

Как вы можете видеть, на одной стороне ZipCode находится файл «Найдено parameters.ZipCode «, в то время как на другой стороне находится папка проекта project.parameters.ZipCode . Ниже приведено мое дерево папок:

 . ├── project │   ├── app.py │   ├── constants.py │   ├── parameters.py ├── testing │   ├── test_parameters.py  

Почему классы имеют разные относительные пути?

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

1. Потому что , скорее всего, вы что-то напутали sys.path , поэтому для определения местоположения импорта используются как корневой каталог, так и project каталог.