FsCheck С# Когда комбинатор свойств

Я пытаюсь внедрить fscheck, но мне очень тяжело, так как документации по C# не так много. Не могли бы вы объяснить, почему следующий пример использования комбинатора When для свойств не работает (видимо, я не понимаю, как его правильно использовать)?

 [Test]
    public void WherePorperty()
    {
      Prop.ForAll(NotNullString().ToArbitrary(), s=>s.StartsWith("A").When(s.StartsWith("A"))).VerboseCheckThrowOnFailure();
    }

    public Gen<string> NotNullString()
    {
      return Arb.Generate<string>().Where(s => s != null);
    }

person user3101007    schedule 31.01.2017    source источник
comment
Запрос примеров считается не по теме на SO.   -  person    schedule 31.01.2017


Ответы (1)


На самом деле он не терпит неудачу, он просто говорит: «Аргументы исчерпаны после n тестов».

Когда вы используете When, FsCheck отслеживает, сколько сгенерированных значений пришлось отбросить, потому что они не удовлетворяют условию, указанному в When. По умолчанию это 1000 значений.

Это указывает на то, что условие является слишком строгим, генератор недостаточно часто генерирует значения, удовлетворяющие условию When.

Это своего рода подстраховка, чтобы время тестирования не увеличивалось, или тест вообще не зависал.

Кстати, это объясняется здесь: https://fscheck.github.io/FsCheck/Properties.html#Conditional-Properties с примером C#.

person Kurt Schelfthout    schedule 02.02.2017