0

単体テストとして実行しているプロパティ テストは、実際には合格しているものの、失敗しているようです。

コードは次のとおりです。

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 |> should equal true

概要:

テスト名: 2 つの数値を加算すると、結果はパラメーターの順序に依存しないはずです

Test FullName: Tests.Units.2 つの数値を加算すると、結果はパラメーターの順序に依存しないはずです

テスト結果: 失敗

Result StackTrace: at FsUnit.TopLevelOperators.should[a,a](FSharpFunc`2 f, ax, Object y) in d:\GitHub\FsUnit\src\FsUnit.NUnit\FsUnit.fs:line 44

Tests.Units.When で 2 つの数値を追加すると、結果はパラメーター order() に依存してはなりません

結果メッセージ: 予想: 真ですが、そうでした

結果 StandardOutput: OK、100 個のテストに合格しました。

私はこれを正しく読んでいますか?

私は何が欠けていますか?

4

1 に答える 1

3

Check.QuickThrowOnFailure代わりに使用してください:

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

NUnit などの単体テスト フレームワーク内からプロパティを実行しようとしているように見えるため、代わりに FsCheck 用の Glue ライブラリのいずれかを使用することを検討する必要があります。

これにより、[<Property>]属性を使用してプロパティを書き込むことができます。

[<Property>]
let ``When I add two numbers, the result should not depend on parameter order``x y =
    let result1 = add x y
    let result2 = add y x // reversed params
    result1 = result2

NUnit の拡張性 API は貧弱であるため、NUnit の代わりに xUnit.net を使用すると、多くの手間を省くことができます。

于 2015-11-29T13:50:56.483 に答える