使用 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# 和普通单元测试。
在使用 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# 和普通单元测试。