在 F# 中使用带有 Unquote 的断言消息?
Using assertion messages with Unquote in F#?
一些测试断言框架允许您向断言添加自定义消息,例如使用 NUnit 的以下内容:
Assert.AreEqual(1, result, "the result should be one")
在 F# 中使用 [Unquote][1] 时是否可以做同样的事情?
test <@ result = 1 @>
更新
我最接近的是在引用的表达式中添加一个简单的注释。由于我这样做的动机是记录正在验证的内容(我倾向于断言不止一次!),这足以满足我的需求。
test <@
// the result should be one
result = 1
@>
另一个更新
我一直在使用 Stephen 的建议来使用 ignore "description here";
,我真的很喜欢。如果我这样声明自己的函数,我发现它更容易阅读:
> let inline checking _ = ()
> let result = 2;;
> test <@ checking "the result should be one"; result = 1 @>;;
Test failed:
checking "the result should be one"; result = 1
(); result = 1
result = 1
2 = 1
false
您可以这样做(使用 F# Interactive)
> let result = 2;;
> test <@ ignore "the result should be one"; result = 1 @>;;
Test failed:
ignore "the result should be one"; result = 1
(); result = 1
result = 1
2 = 1
false
但是如果你使用像 expected
和 actual
这样的变量名,Unquote 的输出就足够丰富了,不需要这样的补充注释
> let actual = 2;;
> let expected = 1;;
> test <@ actual = expected @>;;
Test failed:
actual = expected
2 = 1
false
一些测试断言框架允许您向断言添加自定义消息,例如使用 NUnit 的以下内容:
Assert.AreEqual(1, result, "the result should be one")
在 F# 中使用 [Unquote][1] 时是否可以做同样的事情?
test <@ result = 1 @>
更新
我最接近的是在引用的表达式中添加一个简单的注释。由于我这样做的动机是记录正在验证的内容(我倾向于断言不止一次!),这足以满足我的需求。
test <@
// the result should be one
result = 1
@>
另一个更新
我一直在使用 Stephen 的建议来使用 ignore "description here";
,我真的很喜欢。如果我这样声明自己的函数,我发现它更容易阅读:
> let inline checking _ = ()
> let result = 2;;
> test <@ checking "the result should be one"; result = 1 @>;;
Test failed:
checking "the result should be one"; result = 1
(); result = 1
result = 1
2 = 1
false
您可以这样做(使用 F# Interactive)
> let result = 2;;
> test <@ ignore "the result should be one"; result = 1 @>;;
Test failed:
ignore "the result should be one"; result = 1
(); result = 1
result = 1
2 = 1
false
但是如果你使用像 expected
和 actual
这样的变量名,Unquote 的输出就足够丰富了,不需要这样的补充注释
> let actual = 2;;
> let expected = 1;;
> test <@ actual = expected @>;;
Test failed:
actual = expected
2 = 1
false