Запретить комбинации параметров - PullRequest
0 голосов
/ 20 декабря 2018

Я пытаюсь использовать FsCheck для написания базового теста на основе свойств для класса, который генерирует случайные DateTimeOffset значения в заданном интервале.> max потому что я проверяю входные параметры Next() и выбрасываю ArgumentException в этом случае.

public DateTimeOffset Next(DateTimeOffset min, DateTimeOffset max)
{
    if (min > max)
    {
        throw new ArgumentException(nameof(min));
    }

    // ...
}

Я не хочу менять реализацию для замены входных параметров.И я не хочу делать это в методе тестирования.

Есть ли способ научить FsCheck генерировать значения min и max с ограничением, что min никогда не должно быть большечто max?

Образцы в C # будут с благодарностью, потому что мои знания о F # не соответствуют номиналу.

1 Ответ

0 голосов
/ 07 января 2019

В конце концов я решил проблему следующим образом:

[Property(Arbitrary = new[] { typeof(MyArbitraries) })]
public void ValueBetweenMinAndMax((DateTimeOffset minValue, DateTimeOffset maxValue) bounds)
{
    // ...
}

public static class MyArbitraries
{
    public static Arbitrary<(DateTimeOffset minValue, DateTimeOffset maxValue)> DateTimeOffsetBounds()
    {
        return (from minValue in Arb.Generate<DateTimeOffset>()
                from maxValue in Arb.Generate<DateTimeOffset>()
                where minValue <= maxValue
                select (minValue, maxValue))
            .ToArbitrary();
    }
}

Я хотел, чтобы параметры теста соответствовали сигнатуре sut, чтобы сделать тест как можно более простым для понимания.Параметры предварительной обработки отвлекли бы от того, что я на самом деле хотел протестировать.

Тем не менее, альтернатива, указанная @Ruben, все еще хороша.

...