함수 구현을위한 생성기를 만들고 ScalaCheck에서 구현과 입력을 무작위로 지정합니다. 이 개념과 같은 코드 :
type Input = ...
type Output = ...
trait Algorithm {
def apply(input: Input): Output
}
val funA: Algorithm = ...
val funB: Algorithm = ...
val funC: Algorithm = ...
val funD: Algorithm = ...
import org.scalacheck._
import Prop.BooleanOperators // for the ==> operator
genInput: Gen[Input] = ...
genAlgorithm: Gen[Algorithm] = Gen.oneOf(funA, funB, funC, funD)
propAlgorithm = Prop.forAll(genAlgorithm, genAlgorithm, genInput) {
case (f, g, x) => (f != g) ==> f(x) == g(x)
}
당신은 또한이 Algorithm
에 합리적인 toString
방법이 있어야합니다, 오류 보고서가 도움이 확인하십시오.
제안 된 방법에 약간의 불편 함이 있습니다. 모든 실현에 대해 별도의 보고서가 없습니다. 테스트가 실패 할 때 나는 그들 중 하나가 다른 것과 동기화되지 않고 지식이 제공되지 않는다는 것을 안다. 그리고이 접근법에 더 큰 이슈가 있습니다 : 테스트 케이스가 예외로 실패하거나 무한 루프로 타임 아웃되면 모든 테스트 케이스가 중단됩니다. – ayvango