私は最初のジェネリック関数をF#で書き込もうとしていますが、ここでいくつかの概念が欠落しているようです:
module Assert =
let ThrowsException<'e : exn> functionUnderTest =
try
let result = functionUnderTest
printfn "fails"
with
| :? 'e -> printfn "succeeds"
| _ -> printfn "fails"
stdin(18,28):エラーFS0010:パターンに予期しないシンボル':'があります。'>'または他のトークンが必要です。
そのような関数を使用して、例外が発生したかどうかをテストできるようにしたいと思います。
let myFunction=HttpClient.postDocRaw "http://notexisting.com/post.php" "hello=data"
Assert.ThrowsException System.Net.WebException myFunction
このツールをテスト用に実現したいので、誰かが解決策を持っていればそれは素晴らしいことですが、さらに、私はF#を学んでおり、このような関数を作成しようとするとどこが間違っているのか知りたいです。
最終コード:
module Assert =
let ThrowsException<'e when 'e :> exn> functionUnderTest =
try
let actual = functionUnderTest()
printfn "succeeds"
with
| :? 'e -> printfn "succeeds"
| _ -> Assert.Fail()
[<TestClass>]
type HttpClientTest() =
[<TestMethod>]
member x.PostDataWrongUrl() =
Assert.ThrowsException<System.Net.WebException> (fun() -> HttpClient.postDocRaw "http://notexisting.com/post.php" "hello=data")