Подходит ли FSCheck для тестирования конструкции типа?

Фон:

У меня есть большое количество команд, которые удовлетворяют следующим правилам:

  1. нет сеттеров (неизменяемых)
  2. один конструктор
  3. имя параметра совпадает с именем устанавливаемого свойства (кроме кожуха)

Я хотел бы написать тестер, который тестирует следующие

  1. учитывая, что все аргументы предоставлены, я получаю экземпляр класса, и что все свойства установлены на переданное значение.
  2. учитывая, что любой из регулируемых параметров является нулевым, пустым и т. д. на основе конструктора типа вызывает исключение аргумента.

Теперь я могу написать это с помощью рефлексии, вручную, без проблем, но мне было интересно, могу ли я использовать генераторы FsCheck для генерации параметров.

Это то, что я мог бы достичь с FSCheck?

1 ответ

Решение

Да, оно может. Фактически, если FsCheck может генерировать типы аргументов (то есть, если они являются примитивными типами, такими как string или int, или могут быть сгенерированы отражательно), то из вашего описания FsCheck может генерировать эти типы из коробки без каких-либо действий.

Например, такой тип: (я предполагаю, что вы используете C#)

public class Foo {
    public string A { get; }
    public int[] B { get; }
    public Foo(string a, int[] b) {
       A = a;
       B = b;
    }
}

может быть сгенерирован FsCheck, вы можете написать тест xunit с помощью FsCheck.Xunit следующим образом:

[Property]
public void FooTest(Foo oneRandomFoo, Foo[] manyRandomFoos) {
    // assert something about the foos
}

И FsCheck создаст для вас несколько случайных экземпляров Foo.

Другие вопросы по тегам