如何解释基于 属性 的测试代码?
How can I interpret property based test code?
如何解释基于 属性 的测试代码?
我正在努力翻译以下片段中的说明:
let myProperty = Prop.forAll fiveAndThrees <| fun number ->
let actual = transform number
let expected = "jbdhjsdhjdsjhsdglsdjlljh"
expected = actual
Check.QuickThrowOnFailure myProperty
具体来说,我正在努力处理向后管道运算符(即“<|”)。
这是测试:
[<Fact>]
let ``FizzBuzz.transform returns FizzBuzz`` () =
let fiveAndThrees = Arb.generate<int> |> Gen.map ((*) (3 * 5))
|> Arb.fromGen
let myProperty = Prop.forAll fiveAndThrees <| fun number ->
let actual = transform number
let expected = "jbdhjsdhjdsjhsdglsdjlljh"
expected = actual
Check.QuickThrowOnFailure myProperty
有人可以逐步指导我了解这段代码的工作原理吗?
可以使用正向管道运算符(即“|>”)重写吗?
此答案仅涵盖为什么使用 <|
而不是 |>
。
这里有 5 个示例,这些示例致力于将 <|
用于大型函数。第 6 个示例是显示使用 |>
而不是 <|
的代码的外观。关键是,对于使用 |>
的第 6 个示例,您必须查看代码以找到主要功能 funThatNeedsListAndFunc
,但是对于 <|
,主要功能 funThatNeedsListAndFunc
是显而易见的。所以你通常会看到 <|
当最后一个参数是一个函数并且你想在主函数之后传递函数以便于理解。就这样;不要阅读更多内容。
阅读 Mark 的博客后,我还了解到 <|
有助于删除 fun
周围的 ( )
。使用 ( )
的示例在示例 7 中给出。
let funThatNeedsListAndFunc list func =
func list
let func = List.sum
let list = Seq.toList { 0 .. 5}
let result1 = funThatNeedsListAndFunc list func
printfn "result1: %A" result1
let result2 = funThatNeedsListAndFunc list <| func
printfn "result2: %A" result2
let result3 = funThatNeedsListAndFunc list <| List.sum
printfn "result3: %A" result3
let result4 = funThatNeedsListAndFunc list <|
fun (list : 'a list) -> List.sum list
printfn "result4: %A" result4
let result5 = funThatNeedsListAndFunc list <|
fun (list : 'a list) ->
// This will be a long function
let a = 1
let b = 2
let c = a * b
let result = List.sum list
let d = "more useless lines"
let (e,f,g) = ("a", 15, 3.0)
result
printfn "result5: %A" result5
.
let result6 =
fun (list : 'a list) ->
// This will be a long function
let a = 1
let b = 2
let c = a * b
let result = List.sum list
let d = "more useless lines"
let (e,f,g) = ("a", 15, 3.0)
result
|> funThatNeedsListAndFunc list
printfn "result6: %A" result6
.
let result7 =
funThatNeedsListAndFunc list (fun (list : 'a list) ->
// This will be a long function
let a = 1
let b = 2
let c = a * b
let result = List.sum list
let d = "more useless lines"
let (e,f,g) = ("a", 15, 3.0)
result)
printfn "result7: %A" result7
如何解释基于 属性 的测试代码?
我正在努力翻译以下片段中的说明:
let myProperty = Prop.forAll fiveAndThrees <| fun number ->
let actual = transform number
let expected = "jbdhjsdhjdsjhsdglsdjlljh"
expected = actual
Check.QuickThrowOnFailure myProperty
具体来说,我正在努力处理向后管道运算符(即“<|”)。
这是测试:
[<Fact>]
let ``FizzBuzz.transform returns FizzBuzz`` () =
let fiveAndThrees = Arb.generate<int> |> Gen.map ((*) (3 * 5))
|> Arb.fromGen
let myProperty = Prop.forAll fiveAndThrees <| fun number ->
let actual = transform number
let expected = "jbdhjsdhjdsjhsdglsdjlljh"
expected = actual
Check.QuickThrowOnFailure myProperty
有人可以逐步指导我了解这段代码的工作原理吗?
可以使用正向管道运算符(即“|>”)重写吗?
此答案仅涵盖为什么使用 <|
而不是 |>
。
这里有 5 个示例,这些示例致力于将 <|
用于大型函数。第 6 个示例是显示使用 |>
而不是 <|
的代码的外观。关键是,对于使用 |>
的第 6 个示例,您必须查看代码以找到主要功能 funThatNeedsListAndFunc
,但是对于 <|
,主要功能 funThatNeedsListAndFunc
是显而易见的。所以你通常会看到 <|
当最后一个参数是一个函数并且你想在主函数之后传递函数以便于理解。就这样;不要阅读更多内容。
阅读 Mark 的博客后,我还了解到 <|
有助于删除 fun
周围的 ( )
。使用 ( )
的示例在示例 7 中给出。
let funThatNeedsListAndFunc list func =
func list
let func = List.sum
let list = Seq.toList { 0 .. 5}
let result1 = funThatNeedsListAndFunc list func
printfn "result1: %A" result1
let result2 = funThatNeedsListAndFunc list <| func
printfn "result2: %A" result2
let result3 = funThatNeedsListAndFunc list <| List.sum
printfn "result3: %A" result3
let result4 = funThatNeedsListAndFunc list <|
fun (list : 'a list) -> List.sum list
printfn "result4: %A" result4
let result5 = funThatNeedsListAndFunc list <|
fun (list : 'a list) ->
// This will be a long function
let a = 1
let b = 2
let c = a * b
let result = List.sum list
let d = "more useless lines"
let (e,f,g) = ("a", 15, 3.0)
result
printfn "result5: %A" result5
.
let result6 =
fun (list : 'a list) ->
// This will be a long function
let a = 1
let b = 2
let c = a * b
let result = List.sum list
let d = "more useless lines"
let (e,f,g) = ("a", 15, 3.0)
result
|> funThatNeedsListAndFunc list
printfn "result6: %A" result6
.
let result7 =
funThatNeedsListAndFunc list (fun (list : 'a list) ->
// This will be a long function
let a = 1
let b = 2
let c = a * b
let result = List.sum list
let d = "more useless lines"
let (e,f,g) = ("a", 15, 3.0)
result)
printfn "result7: %A" result7