Ich bin ein etwas defensiver Programmierer und ein großer Fan von Microsoft Code Contracts.
Jetzt kann ich nicht immer C # verwenden und in den meisten Sprachen habe ich nur noch Assertions. So lande ich normalerweise mit folgendem Code:
class
{
function()
{
checkInvariants();
assert(/* requirement */);
try
{
/* implementation */
}
catch(...)
{
assert(/* exceptional ensures */);
}
finally
{
assert(/* ensures */);
checkInvariants();
}
}
void checkInvariants()
{
assert(/* invariant */);
}
}
Dieses Paradigma (oder wie auch immer Sie es nennen würden) führt jedoch zu viel Code-Unordnung.
Ich habe angefangen mich zu fragen, ob es sich wirklich lohnt und ob ein richtiger Unit-Test dies bereits abdecken würde.