Linq к XML - удаляют узел и добавляют новый узел в том же месте

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

При следовании за этим процессом строго, все ''единицы'' защищены системой поддержки, которую модульные тесты делают, даже самое приземленное.

Assert.IsEqual(p.DiscountPrice,90);

нет никакой причины, которую тест развивает в том направлении - или я пропускаю что-то в Вашем обосновании. Когда цена равняется 100 и скидке 20, сниженная цена равняется 80. Это похоже на инвариант.

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

Красный - Green - Осуществляет рефакторинг - это должно помнить сущность процесса TDD.

Красный относится к красной панели JUnit, когда тесты перестали работать.

Green является цветом индикатора выполнения JUnit, когда все тесты передают.

Осуществляют рефакторинг при зеленом условии: удалите любой dupliation, улучшите удобочитаемость.

Теперь для обращения к точке о "3-4 слоях выше кода", это верно в традиционном (подобном водопаду) процессе, не, когда процесс разработки является гибким. И гибкий мир, куда TDD прибывает из; TDD является краеугольным камнем экстремальное программирование .

Гибкий о прямой связи, а не thrown-over-the-wall документах требования.

5
задан chugh97 29 October 2009 в 16:36
поделиться

2 ответа

Что мы делаем; при запуске приложения или примерно каждый час мы делаем запрос GET к нашему веб-серверу.

http://www.domain.com/app/versionCheck.php?app=APP_NAME&version=2.1.1.1

Скрипт проверяет базу данных и сравнивает версии. Если версия другая » Вы нашли XElement (или, в общем, XNode ), который нужно заменить в дереве, создать новый XElement , который будет служить заменой, а затем используйте метод XNode.ReplaceWith для старого элемента, передав новый в качестве аргумента.

4
ответ дан 18 December 2019 в 14:48
поделиться

Если я правильно вас понял, это должно помочь вам в этом.

SolarSystem.xml:

<?xml version="1.0" encoding="UTF-8"?>
<SolarSystem>
  <Planets>
    <Planet Id="1">
      <Name>Mercury</Name>
    </Planet>
    <Planet Id="2">
      <Name>Venus</Name>
    </Planet>
    <Planet Id="3">
      <Name>Earth</Name>
    </Planet>
  </Planets>
</SolarSystem>

Код находит Меркурий, добавляет лишний элемент, удаляет его и повторно вставляет в конец коллекции .

XDocument SolarSystem = XDocument.Load(Server.MapPath("SolarSystem.xml"));
IEnumerable<XElement> Planets = SolarSystem.Element("SolarSystem").Element("Planets").Elements("Planet");

// identify and change Mercury
XElement Mercury = Planets.Where(p => p.Attribute("Id").Value == "1").FirstOrDefault();
Mercury.Add(new XElement("YearLengthInDays", "88"));

// remove Mercury from current position, and add back in at the end
Mercury.Remove();
Planets.Last().AddAfterSelf(Mercury);

// save it as new file
SolarSystem.Save(Server.MapPath("NewSolarSystem.xml"));

, что дает:

<?xml version="1.0" encoding="UTF-8"?>
   <SolarSystem>
     <Planets>
       <Planet Id="2">
         <Name>Venus</Name>
       </Planet>
       <Planet Id="3">
         <Name>Earth</Name>
       </Planet>
       <Planet Id="1">
         <Name>Mercury</Name>
         <YearLengthInDays>88</YearLengthInDays>
       </Planet>
     </Planets>
   </SolarSystem>
8
ответ дан 18 December 2019 в 14:48
поделиться
Другие вопросы по тегам:

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