У меня достаточно знаний о модульном тестировании. Я пытался читать о кодовых контрактах. Действительно ли это помогает модульному тестированию? Это переоценено, особенно когда мы говорим о кодовом контракте, помогающем выполнять модульное тестирование. Я конкретно имею в виду контракты в .net 4.0. Я использую nunit для модульного тестирования.
Вопрос
Действительно ли кодовые контракты помогают модульному тестированию?
Ответы
Ответ 1 · рейтинг 4 · Ryan Hayes
Да и Нет. Модульные тесты - это, по сути, контракт, в котором говорится, что MyMethod() принимает X и ожидает, что Y будет результатом, а когда этого не происходит, модульные тесты терпят неудачу, и вы как разработчик MyMethod() получаете предупреждение о том, что вы нарушили что-то внутри него. Контракты кода помогают вам писать модульные тесты, потому что требования в контрактах облегчают вам понимание требований модульных тестов при их написании. Однако истинная причина кодовых контрактов не для вас, а для других разработчиков, использующих API, который вы создаете. Модульные тесты позволяют узнать правильные входные и выходные данные, но когда вы выпускаете код в открытый доступ, модульные тесты не выпускаются вместе с .dll. Контракты кода позволяют другим разработчикам знать те же самые требования посредством контрактов времени компиляции и проверки. Контракты защищают от тех разработчиков (меня), которые имеют ужасную тенденцию не читать документацию по методу и просто начинают передавать вещи, поэтому теперь они будут активно предупреждаться через контракты.
Ответ 2 · рейтинг 4 · wekempf
Контракты кода можно использовать для вещей, которые вы не можете использовать для модульных тестов (контракты для интерфейсов). Они применяются в цепочках наследования (где можно легко ошибиться при ручном модульном тестировании). Они автоматически предоставляют документацию (чего модульные тесты не могут сделать). Они могут обеспечить проверки во время выполнения в производственной среде (чего не могут сделать модульные тесты).
С другой стороны, контракты терпят неудачу только тогда, когда они выполняются, и поэтому без модульных тестов у вас нет гарантий качества кода (то есть, что весь ваш код выполняет различные контракты). Эти две концепции дополняют друг друга.
Ответ 3 · Brian Genisio
Нет, я не думаю, что контракты кода помогают вам писать модульные тесты. Модульные тесты определяют поведение и ограничения данного действия. Одна из тех спецификаций, написанных в модульных тестах, может заключаться в том, что аргументы метода не могут быть нулевыми.
В этом случае вам все равно нужно написать модульный тест. Контракт кода - это способ реализации вашей спецификации, но не единственный.
Другими словами, не думайте, что использование контракта кода означает, что вам не нужно писать модульный тест! Если кто-то изменит контракт кода или удалит его, у вас не будет теста, сообщающего вам, что эта предполагаемая спецификация не удалась.
Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.
Похожие материалы
- Есть ли способ установить файл .runsettings решения по умолчанию в VS2013?
- @InjectMocks и объекты без макетов (хранилища данных Spring)
- Mockito - странная проблема наследования класса области пакета
- Task.Wait() блокирует средство запуска Xamarin.iOS NUnit
- PartCover 4.0 сообщает только о библиотеках NUnit
- Как развернуть управляемый HTTP-модуль на всем сайте?