Если мы удаляем тесты, которые слишком просты для повреждения во время TDD

Я пытался придерживаться подхода TDD. Таким образом, я сделал некоторые тесты, и они все перестали работать. Теперь я реализую. Но теперь, когда я реализую, я видел, что методы слишком просты для сбоя. В особенности я реализовал шаблон "наблюдатель" и все, что происходит, то, что я уведомляю всех зарегистрированных наблюдателей. Так используйте для каждого цикла, и вызов уведомляют. Это, конечно, звучит слишком простым для повреждения. Теперь, когда у меня есть тесты в местах, я должен удалить их? Это также, кажется, определенная пустая трата времени. Так должен я пытаться ожидать методы, которые были бы слишком просты для повреждения?

6
задан Carl Manaster 11 February 2010 в 17:18
поделиться

6 ответов

Нет.

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

8
ответ дан 8 December 2019 в 12:19
поделиться

Вы говорите, что это слишком просто, чтобы потерпеть неудачу:

for (i = 0; i < observers.length; ++i) {
    // Notify observer observers[i]
}

Заманчиво так думать, но примите во внимание эту распространенную ошибку:

for (i = 0; i <= observers.length; ++i) {
    // Notify observer observers[i]
}

Или эту:

for (i = 0; i < observers.length; ++j) {
    // Notify observer observers[i]
}

Или возможно, наблюдатели добавляются неправильно. Или ... или ... или ...

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

3
ответ дан 8 December 2019 в 12:19
поделиться

Да; Если вы тестируете функциональность базового компилятора / виртуальной машины, ваш тест будет слишком простым. Если, конечно, вы не доверяете той конкретной части компилятора / виртуальной машины, которая выполняется.

Но, конечно, реальность тестов немного сложнее, чем просто ответ «да / нет» на этот вопрос. Как отмечено в другом ответе, если вы уже написали тесты, не удаляйте их. Но вы также не должны использовать их в контексте покрытия кода в качестве аргумента в пользу уверенности.

4
ответ дан 8 December 2019 в 12:19
поделиться

Нет.

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

2
ответ дан 8 December 2019 в 12:19
поделиться

Чем больше у вас анализов, тем меньше боли в будущем. Не обращайте внимания на их простоту.

2
ответ дан 8 December 2019 в 12:19
поделиться

Насколько я понимаю, эта общая память построена поверх сопоставленных файлов, но Эта страница указывает на то, что возможность использования сопоставленных файлов памяти в качестве общей памяти является условной.

Использование функции mmap () ограничено системным значением QSHRMEMCTL. Если это системное значение равно 0, функция mmap () не может создавать совместное отображение с PROT_WRITE возможностью. По существу, это предотвращает создание карты памяти, которая может изменить содержимое отображаемого файла потока. Если параметр flags указан MAP_SHARED, параметр prot указывает PROT_WRITE, а системное значение QSHRMEMCTL равно 0, то функции mmap () завершатся ошибкой, и количество ошибок в результатах EACCES.

-121--1501353-

Идея добавления атрибута InternityVisibleTo является хорошей, но я думаю, что проблема заключается в том, что Xml-код сериализации ищет только открытые типы в сборке.
Насколько мне известно, нет пути сериализовать или десериализовать внутренние типы, и вам придется либо объявить типы общедоступными, либо написать свой собственный код сериализации.
Более того, в документации по классам GroupSerializer явным образом указано, что сериализуются только общедоступные свойства объекта: «сериализация XML - это процесс преобразования общедоступных свойств и полей объекта в последовательный формат (в данном случае XML) для места хранения или транспорта», так что это действительно выглядит как конструкторское решение.

-121--4903816-

Теперь, когда вы получили все эти тесты, чтобы пройти оставить их в покое. Если они бегут достаточно быстро, они никому не будут обузой.

Однако в будущем вы можете написать только один неуспешный тест. (См. Три правила ). Это потому, что это позволит улучшить дизайн во время разработки кода.

Когда у вас были сбои во всех тестах и не было реализации, вы исправили свой дизайн и теперь его работа, вы можете быть ненавидимы, чтобы изменить дизайн, чтобы улучшить его.

Я также подозреваю, что у вас было непростое время для реализации вашего кода, поскольку каждый шаг реализации мог пробить больше тестов, чем прошел, но эй, я только догадываюсь!

0
ответ дан 8 December 2019 в 12:19
поделиться
Другие вопросы по тегам:

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