次のクラス(〜pseudocode)をテストしていると仮定しましょう。
// (...)
public Result Process(Image image)
{
Image image2 = PreprocessImage(image);
PartialResult r1 = Process1(image2);
PartialResult r2 = Process2(r1);
Result result = FinalProcessing(r2);
return result;
}
public Image PreprocessImage(Image image)
{
Image tmp1 = Resize(image);
Image tmp2 = Blur(tmp1);
Image tmp3 = Median(tmp2);
Image tmp4 = ExtractSpecificAreas(tmp3);
return tmp4;
}
public Image Median(Image image)
{
// Actual image median algorithm
}
問題をさらに...問題にするために、これらのメソッドのほとんど(たとえば、Process1、Process2、FinalProcessing、ExtractSpecificAreas)の結果は、たとえば、ほとんど予測できないと仮定しましょう。たとえば、ヒューリスティック/決定的なアルゴリズムがいくつかあります。画像から特徴を抽出します。90%の状況で成功する可能性があり、それは許容範囲です。
これらの方法のどれを単体テストしますか?無効な入力/境界条件を除いて、これらのメソッドをどのように単体テストしますか?単体テストが意味をなすための方法は、どの程度基本的であるか(またはどれほど複雑である可能性がありますか)?