背景:
我有大量满足以下规则的命令:
- 没有设置器(不可变)
- 一个构造函数
- 参数名称与正在设置的属性的名称匹配(大小写除外)
我想编写一个测试器来测试以下内容
- 鉴于提供了所有参数,我得到了该类的一个实例,并且所有属性都设置为传递的值。
- 鉴于基于类型构造函数的任何一个所需参数为空、空等,都会引发参数异常。
现在,我可以通过反射来编写它,手动滚动它,没问题,但我想知道我是否可以利用 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 实例。