내가 다음 클래스 (~ 의사) 테스트 해요으니,이 가정하자 :,,의 가정하자 더 ... 문제가 될 수있는 문제에 대한단위 테스트 - 어떻게 복잡한 방법을 단위 테스트해야합니까?
// (...)
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 %의 상황에서는 성공할 수 있습니다.
단위 테스트는 다음 중 어느 것입니까? 무효 입력/경계 조건을 제외하고 어떻게이 단위 테스트를 단위 테스트합니까? 단위 테스트가 의미를 갖는 방법은 초등학생이 (또는 얼마나 복잡 할 수 있습니까?) 방법은 무엇입니까?
사실 신경망은 없지만 결정 론적 알고리즘은 복잡합니다. 그러나 입력 데이터의 복잡성과 품질 때문에 일부 오탐 또는 거짓 네거티브는 거의 없습니다. 그것들을 단위 테스트한다면, 실패한 테스트는 본질적으로 실패한 메소드를 지적하지 않을 수도 있습니다. – Spook
동일한 입력에 대해 항상 동일한 결과를 반환하는 것처럼 들립니다. 그렇다면 다른 코드처럼 단위 테스트를 수행 할 수 있습니다. 무작위 입력으로 단위 테스트를 작성하지 마십시오. 올바른 결과를 알 수있는 이미지 세트를 만들거나 알고리즘의 결과가 정확해야한다고 말할 수있는 곳에서 단위 테스트에서 예상되는 결과를 사용하십시오. –