例えば
long add(long a, long b)
という関数があったときに、オーバーフローが無い範囲を引数の定義域だとして、
if (a == 1234567 && b == 987654) {
return 0;
}
というバグがあるとしたら、ランダムテストはほぼ無力だよ。

ざっくり計算すると、ランダムテストでこのバグを検出できる確率は、1/2^32*1/2^32≒1/10^19で、
1秒間に10億通り(10^10)テストできたとして、検出するには10^9秒必要。つまり、10^9秒≒31年かかる。
だから、ユニットテストではブラックボックスの手法では駄目で、ホワイトボックスでやる。