Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 当使用RGR方法时,属性测试是否应该与单元测试一起运行?_Unit Testing_F#_Tdd_Fscheck_Property Testing - Fatal编程技术网

Unit testing 当使用RGR方法时,属性测试是否应该与单元测试一起运行?

Unit testing 当使用RGR方法时,属性测试是否应该与单元测试一起运行?,unit-testing,f#,tdd,fscheck,property-testing,Unit Testing,F#,Tdd,Fscheck,Property Testing,当使用RGR方法时,属性测试是否应该与单元测试一起运行 RGR:红色->绿色->重构 我注意到我已经在18毫秒内执行了一个单元测试 但是,我对相同方法的属性测试需要215ms 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

当使用RGR方法时,属性测试是否应该与单元测试一起运行

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

我注意到我已经在18毫秒内执行了一个单元测试

但是,我对相同方法的属性测试需要215ms

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)
模块测试.单元
开放式FSU
打开NUnit.Framework
打开NUnit.Core.Extensibility
打开FsCheck.NUnit
打开FsCheck.NUnit.Addin
开放式FsCheck
让我们加上xy=(x+y)
设交换凸性质x y=
让result1=加x和y
让result2=添加y x//反向参数
结果1=结果2
[]
让``当我添加两个数字时,结果不应该依赖于参数顺序`()=
检查。快速交换属性
[]
让``加两个数`()=
添加2 3 |>应等于(5)
所以我的属性测试需要四分之一秒来执行

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

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


只需签入?

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

在编写属性测试(针对目标函数)时,我经常使用Red/Green/Refactor过程,并且发现它工作得很好

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


总而言之,我发现F#和FsCheck的结合是对C#和普通单元测试的一次净胜利。

从未听说过类型驱动的开发。。。学习一门新语言就等于学习一个全新的生态系统,这真是令人惊讶。迷人的!