使用 RGR 方法时,属性 是否应该使用单元测试来测试 运行?

Should property tests run with unit tests when using the RGR methodology?

在使用 RGR 方法时,属性 应该使用单元测试来测试 运行 吗?

RGR: 红色 -> 绿色 -> 重构

我注意到我执行的单元测试用时 18 毫秒。

但是,我的 属性 相同方法的测试需要 215 毫秒。

module Tests.Units

open FsUnit
open NUnit.Framework
open NUnit.Core.Extensibility

open FsCheck.NUnit
open FsCheck.NUnit.Addin
open FsCheck

let add x y = (x + y)

let commutativeProperty x y = 
    let result1 = add x y
    let result2 = add y x // reversed params
    result1 = result2

[<Test>]
let ``When I add two numbers, the result should not depend on parameter order``()=
    Check.Quick commutativeProperty

[<Test>]
let ``add two numbers`` () =
    add 2 3 |> should equal (5)

所以我的 属性 测试需要四分之一秒来执行。

此外,这只是一项简单的属性测试。

运行宁 属性 测试的有效方法是什么?

刚刚签到?

在默认设置下,每个 FsCheck 属性 运行 100 次,因此速度较慢也就不足为奇了。但是请注意,它并没有慢 100 倍。

我在编写属性测试(针对目标函数)时经常使用Red/Green/Refactor过程,发现它运行良好。

它比在 C# 中执行 TDD 时慢(也是因为 F# 编译器比 C# 编译器慢)。另一方面,F# 类型系统更具表现力,所以我也发现我 rely more on the type system 比我在 C# 中要多。这意味着我需要编写更少的测试。

总而言之,我发现 F# 和 FsCheck 的组合完全胜过 C# 和普通单元测试。