An operation is not responsible for doing anything sensible if its precondition fails to hold. Conversely, an operation will guarantee its post-condition whenever it is invoked when the precondition is true.
Testing for invariants and conditions
Someone has to verify that pre-condition or invariant is valid before actually invoking method or procedure.
Can we trust unknowledgeable class users who do not know anything about class implementation ? No, class users could be malicious.
We should perform checks against null pointers or range errors.