Sử dụng FsCheck, phiên bản F # của thư viện kiểm tra QuickCheck Haskell, để tạo thử nghiệm từ C#, tôi thấy rằng trình tạo chuỗi ngẫu nhiên không tạo chuỗi rỗng.Cách tạo chuỗi rỗng cho kiểm tra FsCheck
using FsCheck.Fluent;
Spec.ForAny<string>(s => s != null).QuickCheck(); // always pass
Hơn nữa, có vẻ như không xử lý chuỗi rỗng theo thiết kế, nhưng tôi chưa quản lý để ghim xuống from the documentation. Ví dụ, chỉ cần chọn giữa hai chuỗi, một trong số họ null, sẽ không làm việc:
var strings = Any.ValueIn<string>(null, "non-null string");
Spec.For(strings, s => true).QuickCheck(); // throws null ref exception
Và chuỗi dường như là một trường hợp đặc biệt, vì nó xử lý đối tượng custom-made như
class Thing {}
khi được trộn với giá trị null:
var objects = Any.ValueIn(null, new Thing());
Spec.For(objects, s => true).QuickCheck(); // pass
Nếu đó là lỗi thì có thể gây ra sự cố nếu cố định. Vì vậy, họ có thể nâng cấp nó thành một "tính năng". – Alapago
@ user2046431 Tôi rất nghi ngờ nó, vì trường hợp này sẽ thất bại và chỉ cho null 'chuỗi'. Và ngay cả khi họ quyết định nâng cấp nó lên một tính năng, ít nhất họ cũng có thể muốn theo dõi nó ở đâu đó trên trang web của họ. –
Đồng ý rằng điều này nên đi đến theo dõi vấn đề của họ, và rằng sửa chữa shrinker để nó không bị nghẹt thở trên nulls sẽ không phá vỡ bất cứ điều gì. Tôi đã nghĩ đến "lỗi" không tạo ra null theo mặc định. – Alapago