1

背景:

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

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

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

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

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

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

4

1 回答 1

0

是的,它可以。事实上,如果 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 实例。

于 2017-09-07T20:50:08.153 回答