У меня достаточно знаний о модульном тестировании. Я пытался читать о кодовых контрактах. Действительно ли это помогает модульному тестированию? Это переоценено, особенно когда мы говорим о кодовом контракте, помогающем выполнять модульное тестирование. Я конкретно имею в виду контракты в .net 4.0. Я использую nunit для модульного тестирования.
Действительно ли кодовые контракты помогают модульному тестированию?
Ответы (3)
4
Да и Нет. Модульные тесты — это, по сути, контракт, в котором говорится, что MyMethod() принимает X и ожидает, что Y будет результатом, а когда этого не происходит, модульные тесты терпят неудачу, и вы как разработчик MyMethod() получаете предупреждение о том, что вы нарушили что-то внутри него. Контракты кода помогают вам писать модульные тесты, потому что требования в контрактах облегчают вам понимание требований модульных тестов при их написании. Однако истинная причина кодовых контрактов не для вас, а для других разработчиков, использующих API, который вы создаете. Модульные тесты позволяют узнать правильные входные и выходные данные, но когда вы выпускаете код в открытый доступ, модульные тесты не выпускаются вместе с .dll. Контракты кода позволяют другим разработчикам знать те же самые требования посредством контрактов времени компиляции и проверки. Контракты защищают от тех разработчиков (меня), которые имеют ужасную тенденцию не читать документацию по методу и просто начинают передавать вещи, поэтому теперь они будут активно предупреждаться через контракты.
4
Контракты кода можно использовать для вещей, которые вы не можете использовать для модульных тестов (контракты для интерфейсов). Они применяются в цепочках наследования (где можно легко ошибиться при ручном модульном тестировании). Они автоматически предоставляют документацию (чего модульные тесты не могут сделать). Они могут обеспечить проверки во время выполнения в производственной среде (чего не могут сделать модульные тесты).
С другой стороны, контракты терпят неудачу только тогда, когда они выполняются, и поэтому без модульных тестов у вас нет гарантий качества кода (то есть, что весь ваш код выполняет различные контракты). Эти две концепции дополняют друг друга.
0
Нет, я не думаю, что контракты кода помогают вам писать модульные тесты. Модульные тесты определяют поведение и ограничения данного действия. Одна из тех спецификаций, написанных в модульных тестах, может заключаться в том, что аргументы метода не могут быть нулевыми.
В этом случае вам все равно нужно написать модульный тест. Контракт кода — это способ реализации вашей спецификации, но не единственный.
Другими словами, не думайте, что использование контракта кода означает, что вам не нужно писать модульный тест! Если кто-то изменит контракт кода или удалит его, у вас не будет теста, сообщающего вам, что эта предполагаемая спецификация не удалась.