Контракты кода действительно помогают модульному тестированию? - PullRequest
8 голосов
/ 27 июля 2010

У меня достаточно знаний по юнит-тестированию. Я пытался читать о контрактах кода. Это действительно помогает юнит-тестированию? Это завышено, особенно когда мы говорим о контракте кода, помогающем проводить модульное тестирование. Я конкретно имею в виду контракты в .net 4.0. Я использую nunit для модульного тестирования.

Ответы [ 3 ]

4 голосов
/ 13 декабря 2011

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

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

4 голосов
/ 27 июля 2010

Да и Нет . Модульные тесты - это, по сути, контракт, в котором говорится, что MyMethod () принимает X и ожидает, что Y будет результатом, а если этого не произойдет, то модульные тесты не пройдут, и вы, как разработчик MyMethod (), получите предупреждение что-то внутри Контракты кода действительно помогают вам писать модульные тесты, потому что требования в контрактах облегчают вам знать требования модульных тестов при их написании. Однако истинная причина контрактов кода - не для вас, а для других разработчиков, использующих создаваемый вами API. Модульные тесты позволяют вам знать правильные входные и выходные данные, но когда вы выпускаете код в wild, модульные тесты не выпускаются с .dll. Контракты кода дают другим разработчикам возможность знать, с помощью контрактов во время компиляции и проверки, те же самые требования. Контракты защищают от тех разработчиков (меня), которые имеют ужасную тенденцию не читать документацию метода и просто начинать передавать вещи, поэтому теперь их будут активно предупреждать с помощью контрактов.

0 голосов
/ 27 июля 2010

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

В этом случае вам все равно нужно написать модульный тест.Контракт кода - это способ реализации вашей спецификации, но не единственный.

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

...