тест setuptools скрывает ошибки импорта. Как иметь лучшую информацию?

Я использую два разных подхода в моем models.py. Первым является декоратор permalink:

from django.db.models import permalink

def get_absolute_url(self): 
    """Construct the absolute URL for this Item."""
    return ('project.app.views.view_name', [str(self.id)])
get_absolute_url = permalink(get_absolute_url)

Вы также можете позвонить reverse напрямую:

from django.core.urlresolvers import reverse

def get_absolute_url(self): 
    """Construct the absolute URL for this Item."""
    return reverse('project.app.views.view_name', None, [str(self.id)])
7
задан Stefano Borini 30 November 2009 в 09:51
поделиться

3 ответа

Проблема в том, что первый аргумент __ import __ () должен быть модулем. Когда вам нужно добраться до объекта с именем, разделенным точками, вы никогда не знаете, какая часть является модулем, а какая нет. Один из способов получить объект module.subname - это сначала попытаться импортировать его как подмодуль, а в случае сбоя использовать getattr (module, subname) , как это делает unittest . Иногда это приводит к ошибке AttributeError вместо ImportError . Другой способ сделать это - сначала попробовать getattr (module, subname) и только в случае неудачи попытаться импортировать. Этот способ не лучше: иногда он выдает ImportError , тогда как более подходящим было бы AttributeError .

Вероятно, лучшее, что unittest может сделать в этом случае, - это создать собственное исключение, говоря что ни импорт, ни поиск атрибутов не удалось. Попробуйте отправить отчет об этой проблеме.

1
ответ дан 7 December 2019 в 14:33
поделиться

Вы также можете попробовать свой код с помощью Distribute (ответвление setuptools, так как setuptools не очень активно поддерживается). Не знаю, будет ли это по-другому, но попробовать стоит.

0
ответ дан 7 December 2019 в 14:33
поделиться

Мы обнаружили, что подход DataTemplate имеет некоторые ограничения. Например, шаблон создается как общий экземпляр (singleton). В некоторых сценариях это имеет нежелательные побочные эффекты. Именно поэтому мы используем первую конструкцию ViewModel (с введенным видом).

Подход, который мы используем, описан на странице проекта WPF Application Framework (WAF) :

http://waf.codeplex.com/wikipage?title=Model-View-ViewModel%20Pattern&ProjectName=waf

-121--2870044-

Это может быть так же просто, как и случай, когда платформа тестирования не загружает ту же сборку, над которой вы сейчас работаете. У меня это случалось в редких случаях в NUnit, который работает над копией вашей сборки в испытании; иногда он перестал копировать самую последнюю версию. Имеют ли точки останова индикатор «Символы не загружены»?

-121--2432366-

Проблема заключается в том, что Python ImportError не сообщает вам, в каком модуле на самом деле произошла ошибка, если вы не внимательно изучите трассировку - чего не делает модуль unittest. У вас будет та же проблема с модулем unittest, независимо от того, какой инструмент вы используете для его запуска.

Вы можете попробовать «носовой» пакет - он имеет плагин setuptools, так что вы можете добавить его в свой setup.py и позволить ему найти и импортировать ваши тесты, вместо использования setuptools по умолчанию поиска тестов. Если я правильно помню, он загружает тестовый код другим способом, чем unittest, и может дать лучшее сообщение об ошибке в этом случае. И даже если это не так, то, вероятно, было бы проще добавить его в нос, чем уловить!

0
ответ дан 7 December 2019 в 14:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: