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