2

RGR 手法を使用する場合、プロパティ テストは単体テストと一緒に実行する必要がありますか?

RGR:赤 -> 緑 -> リファクタリング

私が持っている単体テストが 18 ミリ秒で実行されることに気付きました。

ただし、同じメソッドのプロパティ テストには 215 ミリ秒かかります。

module Tests.Units

open FsUnit
open NUnit.Framework
open NUnit.Core.Extensibility

open FsCheck.NUnit
open FsCheck.NUnit.Addin
open FsCheck

let add x y = (x + y)

let commutativeProperty x y = 
    let result1 = add x y
    let result2 = add y x // reversed params
    result1 = result2

[<Test>]
let ``When I add two numbers, the result should not depend on parameter order``()=
    Check.Quick commutativeProperty

[<Test>]
let ``add two numbers`` () =
    add 2 3 |> should equal (5)

したがって、私のプロパティ テストの実行には 1/4 秒かかります。

さらに、これは単純なプロパティ テストの 1 つにすぎません。

プロパティテストを実行するための効果的な方法は何ですか?

チェックインだけ?

4

1 に答える 1

3

デフォルト設定では、各 FsCheck プロパティが 100 回実行されるため、遅くなっても驚くことではありません。ただし、100 倍遅いわけではないことに注意してください。

プロパティ テスト (対象となる関数) を記述するときに、Red/Green/Refactor プロセスをよく使用しますが、うまく機能することがわかりました。

C# で TDD を実行する場合よりも遅くなります (これは、F# コンパイラが C# コンパイラよりも遅いためです)。一方、F# の型システムはより表現力に優れているため、C# よりも型システムに依存していることにも気付きました。これは、より少ないテストを書く必要があることを意味します。

全体として、F# と FsCheck の組み合わせは、C# や単純な単体テストよりも優れていることがわかりました。

于 2015-11-29T13:59:53.243 に答える