gpt4 book ai didi

f# - F# 中 NUnit3 测试的测试用例

转载 作者:行者123 更新时间:2023-12-02 06:31:16 25 4
gpt4 key购买 nike

我正在尝试使用 NUnit 为 F# 项目设置测试套件。
似乎特别是在测试诸如解析器和类型检查器之类的东西时,通常会有一个有效输入数据列表和一个无效数据列表。
测试本身实际上是相同的,所以我正在寻找一种巧妙的方法来避免为每个数据项编写测试函数,而是将测试函数与数据分开。
显然,似乎有一种叫做测试用例的东西,但我很难找到关于 NUnit 3 和 F# 使用的综合文档,特别是我的场景 的 最佳实践示例。

任何指针和提示都非常感谢!

最佳答案

在 NUnit3 中有 TestCaseSource and TestCaseData ,对于最佳实践部分,我添加了 FsUnit :

namespace NUnit3Demo

open NUnit.Framework
open FsUnit

[<TestFixture>]
module MyTest =

let methodToBeTested s =
if String.length s > 3 then failwith "Something's wrong"
else String.length s

let validData =
[
TestCaseData(" ").Returns(3)
TestCaseData("").Returns(0)
TestCaseData("a").Returns(1)
]

let invalidData =
[
" "
"abcd"
"whatever"
]

let otherInvalidData =
[
"just"
"because"
]

[<TestCaseSource("invalidData");
TestCaseSource("otherInvalidData")>]
let ``More than 3 characters throws`` s =
(fun () -> methodToBeTested s |> ignore)
|> should throw typeof<System.Exception>

[<TestCaseSource("validData")>]
let ``Less than 4 characters returns length`` s =
methodToBeTested s

请注意, TestCaseData 可以接受和返回任意对象(显然它们应该与测试签名匹配)。此外,数据可以写得更好:
let validData =
[
" ", 3
"", 0
"a", 1
] |> List.map (fun (d, r) -> TestCaseData(d).Returns r)

关于f# - F# 中 NUnit3 测试的测试用例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35733544/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com