2012-05-31 18 views
5

Basit bir özellik denetimi gerçekleştirmeye çalışıyorum ancak Scalacheck, jeneratörlerimi yok sayıyor. Burada ne yapıyorum?Scalacheck, sağlanan jeneratörler görmezden geliyor

object AlgorithmTest extends Properties("Algorithm") { 
    property("Test") = forAll (Gen.choose(0,10)) (n => n>=0 & n<10) 
} 

ve bu daha küçük bir karşı örnekler için arama jeneratör kullanmıyor forAll yönteme geçirilir shrink örneği gibi görünür SBT

[info] ! Algorithm.Test: Falsified after 12 passed tests. [info] > 
ARG_0: -1 [error] Failed: : Total 1, Failed 1, Errors 0, Passed 0, 
Skipped 0 
+0

Sorun, bu tür "postTümleri" kullanımı aracılığıyla (yerleşik jeneratörler için) giderilmiştir - bkz. Https://github.com/rickynils/scalacheck/issues/8 – DNA

cevap

4

içinde sonucudur. Düzgün ile başarısız gerektiğini Sonra

property("Test") = Prop.forAllNoShrink(Gen.choose(1, 10)) (n => n >= 0 && n < 10) 

: Sizin mülkünüzü değiştirirseniz Sonra

property("Test") = Prop.forAll(Gen.choose(1, 10)) { n => 
    Prop.collect(n) { n >= 0 && n < 10 } 
} 

: Büzülme değerleri görselleştirmek için

[info] ! Algorithm.Test: Falsified after 7 passed tests. 
[info] > ARG_0: 10 
[error] Failed: : Total 1, Failed 1, Errors 0, Passed 0, Skipped 0 

Tek yön Prop.collect yöntemini kullanmaktır toplanan değerler şöyle görünür:

[info] ! Algorithm.Test: Falsified after 40 passed tests. 
[info] > ARG_0: -1 
[info] > Collected test data: 
[info] 17% 3 
[info] 17% 1 
[info] 15% 6 
[info] 12% 9 
[info] 10% 2 
[info] 10% 5 
[info] 7% 4 
[info] 7% 8 
[info] 2% -1 
[info] 2% 7 

Burada -1'in daralma işlemi sırasında kullanıldığını görebilirsiniz.

+1

Ancak, bu belgelenen davranış değildir. 1 ile 10 arasında bir jeneratör kullanırsam, tüm değerler [1,10 [. Asla bir -1 – tonicebrian

+2

@ancechu görünmelidir ScalaCheck testi başarısız olan daha basit bir girdi bulmaya çalıştığında, '-1' _after_ testi başarısız oldu - bu "küçülme". Bu aşama, üretim sürecine saygı göstermez - bu bir hata mı, yoksa içsel bir sınırlama mı, bilmiyorum. –

+0

Dün aramam gerekirdi ama bu konu gerçekten tartışıldı [burada] (https://github.com/rickynils/scalacheck/issues/18) – Eric