aba*_*hev 8 f# unit-testing void vs-unit-testing-framework fluent-assertions
我正在使用F#,Visual Studio单元测试框架(又名MSTest)和FluentAssertions为我的F#库编写单元测试.
测试方法应该具有void或Task的返回类型.在C#中这很容易:
[TestMethod]
public void TestMethod1()
{
false.Should().BeFalse();
}
Run Code Online (Sandbox Code Playgroud)
在F#我有以下内容:
[<TestMethod>]
member this.TestMethod1() =
false.Should().BeFalse(null)
|> ignore
Run Code Online (Sandbox Code Playgroud)
否则返回类型更改为,FluentAssertions.PrimitivesBooleanAssertions因此Test Runner看不到它.
如何避免|> ignore每次测试结束?
Ste*_*sen 13
|> ignore这里需要,因为签名TestMethod1是从"由内而外"推断出来的.考虑在C#中,方法声明中需要方法的返回类型.这些是语言之间的深刻差异.
"Fluent"API在F#中是一种麻烦,因为它们涉及实例方法,它们都具有效果并返回值,F#中的红色标记.也就是说,虽然在F#中允许副作用,但它们在语言规范和惯例中都有所隔离.期望返回的方法unit具有效果,但相反地,返回非单位值的方法预期是纯的.
此外,流畅的API寻求解决F#语言中的限制,例如F#没有或解决不同的语言.例如,在F#中,管道操作符+不可变数据结构转换与命令式语言中的流畅API相当.
尝试使用更加惯用的F#单元测试断言库,例如Unquote(免责声明,我是作者).它利用F#的许多优点,就像FluentAssertions试图弥补C#的弱点一样.
只需()在函数末尾添加
这将返回单位
| 归档时间: |
|
| 查看次数: |
4075 次 |
| 最近记录: |