相关疑难解决方法(0)

F#可以使用哪些单元测试框架

我正在寻找能够利用该语言的独特功能的框架.我知道FsUnit.你会推荐别的吗?为什么?

f# unit-testing fsunit f#-unquote

14
推荐指数
1
解决办法
2544
查看次数

类型提供程序中的奇怪无行为

有一个类型提供程序,它有三个属性'a','b'和'c',分别是'string','string option'和'int option'.

当我在这些属性中有"","无"和"1"的实例时,会失败:

(row1.a, row1.b, row1.c) |> should equal ("", None, Some 1)
Run Code Online (Sandbox Code Playgroud)

但所有这些工作都很好:

row1.a |> should equal ""

row1.b |> should equal None

row1.c |> should equal (Some 1)

("", None, Some 1) |> should equal ("", None, Some 1)
Run Code Online (Sandbox Code Playgroud)

这怎么可能?什么可以使b中的None与其他None不同?编译后,None只是一个null,在.Net中两个空值是否可以不同?

与大多数F#类型一样,元组具有结构相等性,因此它应该可以工作.我得到一个带有Message的NUnit.Framework.AssertionException:

Expected: <(, , Some(1))>
But was:  <(, , Some(1))>
Run Code Online (Sandbox Code Playgroud)

NUnit只调用.Equals,这就是问题所在.

这也失败了:

(row1.a, row1.b, row1.c).Equals(("", None, Some 1)) |> should equal true
Run Code Online (Sandbox Code Playgroud)

运行时类型row1System.Tuple<string,Microsoft.FSharp.Core.FSharpOption<string>,Microsoft.FSharp.Core.FSharpOption<int>>,所以即使这应该在理论上工作:

row1 |> should equal ("", None, Some 1)
Run Code Online (Sandbox Code Playgroud)

事实上,当None …

f# type-providers

3
推荐指数
1
解决办法
297
查看次数

单元测试:'[] |>应该等于List.empty'不能按预期工作

我有以下代码,测试失败:

open Xunit
open FsUnit.Xunit

let rec openOrSenior xs = 
    match xs with
    | head :: tail when fst head >= 55 && snd head >= 7 -> "Senior" :: openOrSenior tail
    | head :: tail -> "Open" :: openOrSenior tail
    | [] -> []

[<Fact>]
let ``empty input gives empty result``() =
    openOrSenior [] |> should equal List.empty
Run Code Online (Sandbox Code Playgroud)

测试失败,出现以下匹配错误

FsUnit.Xunit + MatchException:抛出了类型'FsUnit.Xunit + MatchException'的异常.预期:等于[]
实际:是[]

f# xunit pattern-matching fsunit

1
推荐指数
2
解决办法
231
查看次数