3

持つ

type Category(name : string, categoryType : CategoryType) = 
        do
            if (name.Length = 0) then
                invalidArg "name" "name is empty"

FsUnit + xUnitを使用してこの例外をテストしようとしています:

[<Fact>]
let ``name should not be empty``() =
    (fun () -> Category(String.Empty, CategoryType.Terminal)) |> should throw typeof<ArgumentException>

しかし、実行するとXUnit.MatchExceptionが表示されます。私が間違っているのは何ですか?

  1. ソースコードのテスト
  2. カテゴリ タイプのソース コード
4

1 に答える 1

4

私は FsUnit の専門家ではありませんが、MatchExceptionFsUnit はカスタム マッチャーを使用し、一致が成功しないため、この型は想定されていると思います。

ただし、書かれているテストは正しくないようです。

(fun () -> Category(String.Empty, CategoryType.Terminal)

は署名付きの関数unit -> Categoryですが、返された はあまり気にしませんCategory

代わりに、次のように書くことができます

[<Fact>]
let ``name should not be empty``() =
    (fun () -> Category(String.Empty, CategoryType.Terminal) |> ignore)
    |> should throw typeof<ArgumentException>

戻り値ignoreを無視するキーワードが追加されていることに注意してください。Categoryこのテストは成功し、ガード句を削除すると失敗します。

于 2014-04-13T12:36:43.053 に答える