テストコードを埋め込むってのは、突き詰めれば、起こりえないはずの状態が起こるか否か
をチェックすると思う。アサートとかはね。

外部のテストコードによるテストは、起こりえるすべての状態においてプログラムが期待通り
動くか否かをチェックする。

性質的に一方が他方で代用できるものじゃないと思うけど。

事前条件、事後条件、不変条件とかはコンパイラがすごく賢くなって、これらの静的な
整合性のチェック(方チェックみたいに)まで出来るようになると面白いんだけどね。
これにはまだ時間がかかりそう。