나는 다소 방어적인 프로그래머이자 Microsoft의 Code Contracts의 열렬한 팬입니다.
이제는 항상 C #을 사용할 수 없으며 대부분의 언어에서 내가 가진 유일한 도구는 어설 션입니다. 그래서 나는 보통 다음과 같은 코드로 끝납니다.
class
{
function()
{
checkInvariants();
assert(/* requirement */);
try
{
/* implementation */
}
catch(...)
{
assert(/* exceptional ensures */);
}
finally
{
assert(/* ensures */);
checkInvariants();
}
}
void checkInvariants()
{
assert(/* invariant */);
}
}
그러나이 패러다임 (또는 호출 할 것이 무엇이든)은 많은 코드 혼란을 초래합니다.
실제로 노력할만한 가치가 있는지 그리고 적절한 단위 테스트가 이미 이것을 포함하는지 궁금해하기 시작했습니다.