2

使用 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)

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

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

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

只是签到?

4

1 回答 1

3

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

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

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

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

于 2015-11-29T13:59:53.243 回答