2017-09-06 52 views
1

背景:FSCheck是否適合測試類型結構?

我有大量的命令滿足以下規則:

  1. 沒有設置器(不可變)
  2. 一個構造
  3. 參數名稱匹配正在設置的屬性的名稱(除了外殼)

我想寫一個測試儀,測試如下

  1. 考慮到提供了所有參數,我得到了該類的一個實例,並且所有屬性都設置爲傳遞的值。
  2. 基於類型構造函數引發參數異常,假定任何一個需要調用的參數是null或空等。

現在,我可以通過反射來寫這個,手滾動它,沒問題,但我想知道是否可以利用FsCheck生成器來生成參數。

這是我可以通過FSCheck實現的嗎?

回答

0

是的,它可以。事實上,如果FsCheck可以生成參數的類型(即它們是基本類型,如字符串或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實例。