Например, эта статья знакомит их.
В чем преимущество?
Статический анализ кажется прохладным, но в то же время он предотвратит возможность передачи null в качестве параметра в unit test. (если вы следовали примеру в статье)
В то время как на тему модульного тестирования - учитывая, как теперь, безусловно, нет смысла заключать контракты на код, если вы уже практикуете автоматическое тестирование?
Обновление
Играя с кодовыми контрактами, я немного разочарован. Например, на основе кода в принятом ответе:
public double CalculateTotal(Order order)
{
Contract.Requires(order != null);
Contract.Ensures(Contract.Result<double>() >= 0);
return 2.0;
}
Для модульного тестирования вы еще должны писать тесты, чтобы гарантировать, что null не может быть передан, а результат больше или равен нулю, если контракты являются бизнес-логикой. Другими словами, если бы я должен был удалить первый контракт, тесты не сломались бы, если бы у меня не было теста для этой функции. Это основано не на использовании статического анализа, встроенного в лучшие (конечные и т.д.) Выпуски Visual Studio.
По сути, все они сводятся к альтернативному написанию традиционных операторов if. Мой опыт, фактически использующий TDD, с кодовыми контрактами показывает, почему и как я об этом говорил.