Как я обновляю атрибут XML из сценария MSBuild?

не был Должен проверки в направляющих просто работать? Это больше походит на тестирование платформы, чем тестирование Вашего кода. Почему необходимо было бы протестировать проверки?

проверки в направляющих действительно работают - на самом деле, существуют модульные тесты в кодовой базе направляющих для обеспечения его. При тестировании проверки модели Вы тестируете специфические особенности проверки: длина, принятые значения, и т.д. Вы удостоверяетесь, что код был написан, как предназначено. Некоторые проверки являются простыми помощниками, и можно решить не протестировать их на понятии, что "никто не может испортить validates_numericality_of вызов". Это верно? Каждый разработчик всегда не забывает писать это во-первых? Каждый разработчик случайно никогда не удаляет строку на плохой вставке копии? По моему личному мнению Вы не должны тестировать каждую последнюю комбинацию значений для помощника проверки направляющих, но Вам нужна строка для тестирования этого, это там с правильными переданными значениями, на всякий случай некоторый панк изменяет его в будущем без надлежащей предусмотрительности.

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

, Кроме того, тесты кажутся супер хрупкими любому изменению в Вашем коде. Таким образом, при изменении чего-нибудь в моделях необходимо изменить тесты и приспособления для соответствия. Разве это не нарушает принцип DRY?

я не полагаю, что это нарушает DRY. Они связываются (это - каково программирование, коммуникация), две совсем других вещи. Тест говорит, что код должен делать что-то. В коде говорится, что он на самом деле делает. Тестирование чрезвычайно важно, когда существует разъединение между теми вещами.

Тестовый код и код приложения глубоко связаны, очевидно. Я думаю о них как две стороны монеты. Вы не хотели бы переднюю сторону без спины или спины без передней стороны. Хороший тестовый код укрепляет хороший код приложения, и наоборот. Два вместе используются для понимания целой проблемы, которую Вы пытаетесь решить. И правильно написанный тестовый код является документацией - это показывает, как код приложения должен использоваться.

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

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

Моя проблема состоит в том, что затраты на запись тестов кажутся нелепо высокими по сравнению с преимуществами. Тем не менее любой подробный ответ приветствуется, потому что я, вероятно, пропустил преимущество или два.

я перечислю еще несколько преимуществ.

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

, Если у Вас есть полное тестовое покрытие, можно осуществить рефакторинг без РИСКА. Если программная проблема очень сложна (снова, проекты реального мира, которые длятся в течение многих месяцев, имеют тенденцию быть сложными), затем, можно хотеть упростить код, который был ранее написан. Так, можно написать новый код для замены старого кода, и если он проходит все тесты, Вы сделаны. Это делает точно, что старый код сделал относительно тестов. Для проекта, который планирует использовать метод гибкой разработки, рефакторинг абсолютно необходим. Изменения должны будут всегда вноситься.

Таким образом, автоматизированное тестирование, особенно разработка через тестирование, является в основном методом управления сложностью разработки программного обеспечения. Если Ваш проект не очень сложен, стоимость может перевесить преимущества (хотя я сомневаюсь относительно этого). Однако проекты реального мира имеют тенденцию быть очень сложными, и результаты тестирования и TDD выступают за себя: они работают.

(Если Вам любопытно, я нахожу статью Dan North о Поведении Управляемой Разработкой, чтобы быть очень полезным в понимании большого количества значения в тестировании: http://dannorth.net/introducing-bdd )

12
задан Anthony Mastrean 27 July 2011 в 21:37
поделиться

3 ответа

Первая проблема заключается в том, что xpath неверен для обновления атрибута, в настоящее время он ищет "целевые" узлы с атрибутом "fileName", а не атрибутом "fileName" узла называется "target".

Требуемый xpath: / configuration / nlog / target / target / @ fileName

Что касается проблемы с пространством имен, Preet Sangha имеет правильный ответ , вам необходимо использовать префикс пространства имен, и это должно применяться к каждому также подэлемент, поскольку все они находятся в этом пространстве имен.

Заключительное утверждение:

<XmlUpdate
  Prefix="n"
  Namespace="http://www.nlog-project.org/schemas/NLog.xsd"
  XmlFileName="output.xml"
  XPath="//configuration/n:nlog/n:targets/n:target/@fileName"
  Value="${logDirectory}\UpdateWorked.log" />
21
ответ дан 2 December 2019 в 05:28
поделиться

Здесь он указывает на необходимость пространства имен

<XmlUpdate
   Namespace="http://schemas.microsoft.com/.NetConfiguration/v2.0"
   XmlFileName ....

можете ли вы обновить любой другой атрибут?

4
ответ дан 2 December 2019 в 05:28
поделиться

Чтобы завершить ответ, данный keeperofthesoul (я думаю, вы должны дать ему награду) взгляните на:

<XmlUpdate
  XmlFileName="web.config"
  XPath="//configuration/x:nlog/x:targets/x:target/@fileName"
  Value="%24{logDirectory}\SomeLog_%(Configuration.Identity).log"
  Prefix="x"
  Namespace="http://www.nlog-project.org/schemas/NLog.xsd"
  />

Здесь я использую % 24 для записи специального символа $ .

3
ответ дан 2 December 2019 в 05:28
поделиться
Другие вопросы по тегам:

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