Unittesting регистрация МОК?

Другой вариант - перебирать атрибуты и возвращать значение атрибута с локальным именем, оканчивающимся на backgroundImage.

Пример ...

from xml.etree import ElementTree as ET

XML = '''
<body xmlns:ttm="http://www.w3.org/ns/ttml#metadata" 
      xmlns:smpte="http://smpte-ra.org/schemas/2052-1/2013/smpte-tt">
  <div region="imageRegion" xml:id="img_SUB6756004155_0" 
       ttm:role="caption" smpte:backgroundImage="#SUB6756004155_0"></div>
</body>'''

root = ET.fromstring(XML)
div = root.find("div")
val = next((v for k, v in div.attrib.items() if k.endswith('backgroundImage')), None)

if val:
    print(f"Value: {val}")

Выходы ...

Value: #SUB6756004155_0

Это может быть хрупким, хотя. Он возвращает только первый найденный атрибут.

Если это проблема, возможно, используйте вместо этого список:

val = [v for k, v in div.attrib.items() if k.endswith('backgroundImage')]

Это также неправильно вернет атрибут, который заканчивается на «backgroundImage» (например, «invalid_backgroundImage»).

Если это проблема, возможно используйте вместо этого регулярное выражение:

val = next((v for k, v in div.attrib.items() if re.match(r".*}backgroundImage$", "}" + k)), None)

Если вы когда-нибудь сможете переключиться на lxml, тестирование локального имени можно выполнить в xpath ... [1113 ]

val = div.xpath("@*[local-name()='backgroundImage']")
7
задан Andreas 12 January 2009 в 15:11
поделиться

8 ответов

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

2
ответ дан 7 December 2019 в 10:09
поделиться

Так или иначе чувствует себя неправильным мне иметь контейнер МОК, работающий в моих тестовых проектах. Я также заметил, что большинство ошибок, которые вызываются зависимостями, не будучи разрешенным, вызывается порядком dependecies, разрешены, это очень твердо протестировать право и не является чем-то, что я хотел бы сделать как модульный тест.

Обычно я использую Отладку. Операторы контроля в стандартных программах инициализации моих классов. Это дает мне систему раннего оповещения для связанных с МОК ошибок и также помогает указать зависимости лучше в моем коде.

2
ответ дан 7 December 2019 в 10:09
поделиться

То, что я делаю с контейнером МОК Guice, то, что сначала я произвожу классы для некоторой функции с помощью TDD без Guice (это модульные тесты). Затем я создаю интеграционный тест на ту функцию с Guice. В той точке конфигурация МОК (Модуль Guice) является неполной, таким образом, интеграционный тест перестанет работать. Используя TDD, я добавляю конфигурацию МОК шаг за шагом до передач интеграционного теста. Я не добавлю @Inject аннотации, строки конфигурации или определю объем объявления, если это не потребуется, чтобы проходить тест. В результате у меня будет интеграция (или принятие) тестами, удостоверяясь, что конфигурация МОК является правильной и завершенной.

Этот тот же метод должен работать с любым контейнером МОК или другой системой, конфигурация которой так сложна, что это может повредиться - не пишут конфигурации, если это не, требуют, чтобы пройти тест.

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

@aku, @krosenvold и @mookid приводят убедительный аргумент в пользу тестирования, что конфигурация зависимостей корректна.
Я не думаю, что это - поблочное тестирование все же.
Что Вы тестируете? Вы не пробуете к модульному тесту сам контейнер (по-видимому, который не является кодом, который Вы написали или поддерживаете).
То, что Вы пытаетесь протестировать, - то, что все зависимости конкретного типа могут быть созданы и что тип может быть разрешен. Это походит на довольно полезное тестирование системы или интеграционный тест, чтобы иметь в Вашей непрерывной среде интеграции.
Таким образом, после того как у Вас есть двоичные файлы, которые передают модульный тест, можно создать контейнер и увеличить набор для контейнера на машине, которая зеркально отражает продуктивную среду, и протестируйте это каждый из типов, которые контейнер должен смочь разрешить, может на самом деле быть создан, и все их зависимости можно инстанцировать.
Было бы хорошо выполнить это в новом VM, к которому Вы применили свой последний установщик.

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

Так как Ваши компоненты могли бы иметь свои собственные зависимости или выполнить некоторую инициализацию, я покрою этот сценарий UTs.

Что-то как

iocContainer.Register(typeof(MyService1));
service = iocContainer.Get(typeof(MyService));
Debug.AssertNotNull(service);
0
ответ дан 7 December 2019 в 10:09
поделиться

Это может быть полезно, потому что некоторые платформы внедрения зависимости (как Единица) имеют странные правила для выбора который конструктор звонить. Я определенно рекомендовал бы поблочному тестированию удостовериться, регистрация и создание Вашего типа происходят успешно.

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

Я использую Виндзор в проекте MVC ASP.NET, где я записал простой тест, чтобы проверить, что все контроллеры можно инстанцировать (т.е. их зависимости могут быть разрешены).

У меня есть тест для каждой конфигурации веб-сайта (например, "разработка", "тест", "someProductionSite", и т.д.), где я создаю свой Виндзорский контейнер с той конкретной конфигурацией и циклом посредством всех неабстрактных реализаций IController, проверяя, что я могу разрешить экземпляр каждого.

Так как фабрика контроллера является единственной точкой входа в приложение, которое приведет к контейнеру. Твердость (...), я на 100% уверен, что все конфигурации действительны.

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

Например, Я также утверждаю, что все действия контроллера являются виртуальными, который является требованием, потому что я использую автоматическое управление транзакциями Замка для окружения действий контроллера транзакциями.

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

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