2015-01-06 2 views
8

"Scalacheck 생성기가 많이있는 프로젝트에서"0 개의 성공적인 속성 평가 후 양보 .2 개의 평가가 무시되었습니다. "라는 메시지가있는 GeneratorDrivenPropertyCheckFailedException이 발생합니다.Scalacheck/Scalatest PropertyCheckConfig가 무시되는 이유는 무엇입니까?

500 (기본값)과 같이 여러 번 평가 해보고 싶지만 실제로 구성이 무시 된 것을보고 싶지 않습니다.

이 코드를 테스트 클래스에 추가했는데 여전히 똑같은 메시지가 나타납니다. 나는 'sbt clean'을 시도해 보았는데 그곳에서 이상한 일이 일어나지 않았 음을 확인했다.

implicit override val generatorDrivenConfig = PropertyCheckConfig(minSuccessful = 1, maxDiscarded = 500, workers = 1) 

왜 Scalacheck/Scalatest PropertyCheckConfig가 무시됩니까? 당신이 (예를 들어, suchThat를 사용하여) 발전기를 필터링하는 경우

내가 스칼라와 Scalacheck 1.12.1와 2.2.1 Scalatest을 사용하고는

답변

9

은 발전기는 많은 수의 생성 2.10.4 될 수 있습니다 suchThat 제약 조건을 만족하지 못하여 버려지는 값 중 하나입니다. 내가 문자열의 길이를 제한 할 때 나는 이것에 들어갔다. 제가 여러분에게 줄 수있는 한 가지 제안은 여러분이 너무 많은 것들을 버리지 않는 다른 방법으로 여러분의 Gen를 만들고 시도하는 것입니다.

예를 들어, 여기에 내가 먼저 4 문자열을 생성 한 것입니다 :

val gen4CharString = Gen.listOfN(4, (Gen.listOfN[Char] suchThat (s => s != "" && s.length == 4))) 

이 당신이보고 된 하나와 유사한 오류의 결과로 너무 많은 생성 된 값을 폐기하는 원인이었다. 아래와 같이 발전기를 변경하면 문제가 해결됩니다.

val gen4CharString = Gen.listOfN[Char] (4, Gen.alphaChar).map (_.mkString) 
+0

매우 유용한 팁. 'Gen.alphaNumStr.suchThat (_. length <= 50)'으로 특정 길이보다 길지 않은 문자열을 생성하고'Gen.choose (0, 50) .map (Gen.listOfN (_, Gen.alphaNumChar)). map (_. mkString)'. –