2017-01-18 8 views
2

Я пытаюсь утвердить исключение, используя FsUnit, построенный на XUnit. Я взял этот тест с FsUnit website:FsUnit не будет соответствовать исключению - F #

[<Fact>] 
let ``boom``() = 
    (fun() -> failwith "BOOM!" |> ignore) |> should throw typeof<System.Exception> 

Я использую Resharper 2016 года запустить тест, и я получаю следующее сообщение об ошибке:

FsUnit.Xunit+MatchException 
Exception of type 'FsUnit.Xunit+MatchException' was thrown. 
Expected: System.Exception 
Actual: was [email protected] 
    at SqlJuxtFunctionalTests.Scenarios.CompareTableScenarios.boom() in C:\projects\SqlJuxt\src\SqlJuxtFunctional.Tests\CompareTableScenarios.fs:line 22 

Я использую следующие версии библиотек, участвующие:

  • FSharp.Core: 4.0.0.1
  • .Net: 4.6.2
  • FsUnit.Xunit: 1.4.1.0
  • XUnit.core: 2.1.0

Я думал, что это может быть проблема с XUnit поэтому я попытался коммутационного использовать FsUnit на основе NUnit со следующим испытанием:

[<Test>] 
let ``boom nunit``() = 
    (fun() -> failwith "BOOM!" |> ignore) |> should throw typeof<System.Exception> 

версия NUnit бросает MissingMethodException:

System.MissingMethodException : Method not found: 'Void FsUnit.TopLevelOperators.should(Microsoft.FSharp.Core.FSharpFunc`2<!!0,!!1>, !!0, System.Object)'. 
    at File1.boom() 

Любая помощь будет высоко оценена как я на мой ум заканчивается этим.

ответ

3

Я понял это. Чтобы получить тест на работу, мне нужно было использовать FsUnit на основе NUnit и понизить FSharp для использования FSharp 3.1.2.5. Если вы используете FsUnit на основе NUnit и FSharp 4.0.0.1, вы получаете страшный MissingMethodException.

Я не мог понять, почему код не работал в FsUnit.Xunit.

+0

Также посмотрите [этот ответ] (http://stackoverflow.com/questions/36238316/missingmethodexception-when-testing-a-function-that-takes-a-function-parameter/36241071#36241071). –