FSCheck 适合测试类型构造吗?

Is FSCheck suitable for testing type construction?

背景:

我有大量满足以下规则的命令:

  1. 无二传手(不可变)
  2. 一个构造函数
  3. 参数名称与正在设置的 属性 的名称匹配(大小写除外)

我想编写一个测试器来测试以下内容

  1. 鉴于提供了所有参数,我得到了 class 的一个实例,并且所有属性都设置为传递的值。
  2. 假定任何一个必需参数为空、空等,基于类型构造函数引发参数异常。

现在,我可以通过反射写这个,手动滚动它,没问题,但我想知道我是否可以利用 FsCheck 生成器来生成参数。

这是我可以通过 FSCheck 实现的吗?

是的,可以。事实上,如果 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生成,可以用FsCheck.Xunit写一个xunit测试如下:

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

FsCheck 会为你生成一堆随机的 Foo 实例。