首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FsUnit.Xunit列表应包含x,以便f x

FsUnit.Xunit列表应包含x,以便f x
EN

Stack Overflow用户
提问于 2021-02-08 18:10:14
回答 1查看 69关注 0票数 2

我不确定如何用FsUnit.Xunit编写我的测试。

我想检查列表中是否至少有一个元素满足谓词。我知道如何使用should be True编写,但通常您可以通过使用专门的函数获得更好的错误消息。

希望这段代码清楚地说明了我想要实现的目标:

代码语言:javascript
复制
open Xunit
open FsUnit.Xunit

type Foo = 
  {
    X : int
  }

[<Fact>]
let ``squares`` () =
  let xs =
    [ { X = 1 }; { X = 2 }; { X = 3 } ]
    |> List.map (fun foo -> { X = foo.X * foo.X })

  actual 
  |> should exists (satisfies (fun foo -> foo.X = 9)) // Not real code
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-08 23:06:52

我会这样做:

代码语言:javascript
复制
xs
    |> Seq.map (fun foo -> foo.X)
    |> should contain 9

错误输出非常有用:

代码语言:javascript
复制
Expected: Contains 8
Actual:   seq [1; 4; 9]

如果你想要更多的上下文,你可以这样做:

代码语言:javascript
复制
open FsUnit.CustomMatchers

...

xs |> should containf (fun foo -> foo.X = 9)

错误输出为:

代码语言:javascript
复制
Expected: Contains <fun:squares@21-1>
Actual:   [{ X = 1 }; { X = 4 }; { X = 9 }]

这种方法唯一的缺点是"Expected“消息不再显示您正在寻找的特定值。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66099569

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档