2016-11-14 16 views
6

Tôi đang chơi với FsCheck vì vậy tôi có thực hiện điều này:fscheck không tạo ra đủ dữ liệu ngẫu nhiên

let add a b = 
    if a > 100 
    then failwith "nasty bug" 
    else a + b 

... và thử nghiệm này FsCheck dựa trên:

fun (a:int) -> (add a 0) = a 
|> Check.QuickThrowOnFailure 

và thử nghiệm không bao giờ không thành công. Tôi đoán là 100 giá trị được tạo ra bởi trình tạo ngẫu nhiên không bao giờ lớn hơn 100.

Không nên là giá trị "ngẫu nhiên" hơn?

Trả lời

11

Khi bạn sử dụng Check.QuickThrowOnFailure, nó sử dụng cấu hình Config.QuickThrowOnFailure, trong đó có các giá trị:

> Config.QuickThrowOnFailure;; 
val it : Config = 
    {MaxTest = 100; 
    MaxFail = 1000; 
    Replay = null; 
    Name = ""; 
    StartSize = 1; 
    EndSize = 100; 
    QuietOnSuccess = false; 
    Every = <fun:[email protected]>; 
    EveryShrink = <fun:[email protected]>; 
    Arbitrary = []; 
    Runner = <StartupCode$FsCheck>[email protected];} 

Các giá trị quan trọng để xem xét ở đây là StartSize, nhưng đặc biệt EndSize. Một số máy phát trong FsCheck sử dụng ngữ cảnh kích thước để xác định kích thước hoặc phạm vi của các giá trị mà nó tạo ra.

Nếu bạn thay đổi EndSize thành ví dụ: 1,000 bạn có thể thực hiện thử nghiệm không thành công:

> Check.One({Config.QuickThrowOnFailure with EndSize = 1000}, fun (a:int) -> (add a 0) = a);; 
System.Exception: Falsifiable, after 15 tests (0 shrinks) (StdGen (1912816373,296229213)): 
Original: 
101 
with exception: 
> System.Exception: nasty bug 
    at FSI_0040.add(Int32 a, Int32 b) 
    at [email protected](Int32 a) 
    at FsCheck.Testable.evaluate[a,b](FSharpFunc`2 body, a a) in C:\Users\Kurt\Projects\FsCheck\FsCheck\src\FsCheck\Testable.fs:line 161 

    at <StartupCode$FsCheck>[email protected](String message) in C:\Users\Kurt\Projects\FsCheck\FsCheck\src\FsCheck\Runner.fs:line 365 
    at <StartupCode$FsCheck>[email protected](String , TestResult) in C:\Users\Kurt\Projects\FsCheck\FsCheck\src\FsCheck\Runner.fs:line 365 
    at FsCheck.Runner.check[a](Config config, a p) in C:\Users\Kurt\Projects\FsCheck\FsCheck\src\FsCheck\Runner.fs:line 275 
    at <StartupCode$FSI_0055>[email protected]() 
Stopped due to error 
+0

Cảm ơn rất nhiều! Nó hoạt động tốt – vidi

Các vấn đề liên quan