假设我正在测试以下类(~伪代码):
// (...)
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%的情况下成功,这是可以接受的。
你将测试哪些方法?除了无效的输入/边界条件外,你将如何对这些方法进行单元测试?该方法应该多简单或多复杂才能有意义地进行单元测试?