FsUnit не соответствует исключению — F#

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

[<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 SqlJuxtFunctionalTests.Scenarios.CompareTableScenarios+boom@22
   at SqlJuxtFunctionalTests.Scenarios.CompareTableScenarios.boom() in C:\projects\SqlJuxt\src\SqlJuxtFunctional.Tests\CompareTableScenarios.fs:line 22

Я использую следующие версии задействованных библиотек:

  • FSharp.Core: 4.0.0.1
  • .Нет: 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()

Любая помощь будет принята с благодарностью, так как я не в своем уме с этим.


person Kevin Holditch    schedule 18.01.2017    source источник


Ответы (1)


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

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

person Kevin Holditch    schedule 18.01.2017