0

看起来我作为单元测试运行的属性测试失败了,即使它确实通过了。

代码如下:

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 |> should equal true

概括:

测试名称:当我添加两个数字时,结果不应该取决于参数顺序

测试全名:Tests.Units.当我添加两个数字时,结果不应该取决于参数顺序

测试结果:失败

结果 StackTrace:在 FsUnit.TopLevelOperators.should[a,a](FSharpFunc`2 f, ax, Object y) in d:\GitHub\FsUnit\src\FsUnit.NUnit\FsUnit.fs:line 44

在 Tests.Units. 当我添加两个数字时,结果不应该取决于参数 order()

结果消息:预期:true,但是是

结果标准输出:好的,通过了 100 次测试。

我读对了吗?

我错过了什么?

4

1 回答 1

3

改用Check.QuickThrowOnFailure

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

由于看起来您正在尝试从像 NUnit 这样的单元测试框架中运行属性,因此您应该考虑改为使用 FsCheck 的 Glue 库之一:

这将使您能够使用属性编写[<Property>]属性:

[<Property>]
let ``When I add two numbers, the result should not depend on parameter order``x y =
    let result1 = add x y
    let result2 = add y x // reversed params
    result1 = result2

由于 NUnit 的可扩展性 API 很差,使用 xUnit.net 代替 NUnit 可以省去很多麻烦。

于 2015-11-29T13:50:56.483 回答