2015-11-13 81 views
0

考慮我有一個功能,如newConvert。我被拒絕接受newCovertor("IL")的錯誤。產生這種erorr:我用failwith "Invalid Input"F#:UnitTest案例失敗

的erorr是:

System.Exception: Invalid Input 
> at FSI_0160.inputChecker(FSharpList`1 numberList) in C:\Users\Salman\Desktop\coursework6input\itt8060-master\coursework6input\BrokenRomanNumbers\Library1.fs:line 140 
    at FSI_0160.newCovertor(String romanNumber) in C:\Users\Salman\Desktop\coursework6input\itt8060-master\coursework6input\BrokenRomanNumbers\Library1.fs:line 147 
    at <StartupCode$FSI_0165>[email protected]() in C:\Users\Salman\Desktop\coursework6input\itt8060-master\coursework6input\BrokenRomanNumbers\newtest.fs:line 32 
Stopped due to error 

我用FsUnitNunit,它們被加載並安裝和正確地工作。 然後我做了一個測試它使用

[<TestFixture>] 
type ``Given a Roman number15 ``()= 



     [<Test>] 
     member this. 
       ``Whether the right convert for this number must be exist``()= 
        newCovertor("IL") |> should equal System.Exception 

我不明白!該功能失敗,但測試不接受它,爲什麼??????

回答

0

newCovertor不會產生System.Execption - 它拋出它 - 所以你永遠無法與should equal ...部分

趕上與FsUnit你有例外,把它包裝成一個動作:

(fun() -> newCovertor("IL") |> ignore) |> should throw typeof<System.Exception> 

也見really good docs - 有很多種方法可以實現這一點


你的版本不能正常工作的原因是NUnit會在測試方法體內引發異常時正常地將測試標記爲失敗。

如果你把它包在比should throw該動作可以選擇執行此延遲內try ... match動作捕捉預期的異常,並篩選出來(或在這種情況下拋出一個異常,如果那裏有沒有)

btw:就像在C#/ VB.net中一樣,如果你願意的話,你也可以在方法級別上使用NUnit的ExpectedExceptionAttribute - 這樣測試框架就可以爲你處理它。