我们正在使用精彩的FSUnit进行单元测试。这很好,除了我们测试的主体坚持使用完整的F#语法(每行末尾有'in')而不是#light语法。例如:
module MyTests
open System
open NUnit.Framework
open FsUnit
open MyModule
[<TestFixture>]
type ``Given a valid file`` () =
let myFile = createSomeFile()
[<Test>] member x.
``Processing the file succeeds`` () =
let actual = processFile myFile in
actual |> should be True
注意测试第一行末尾的“in”。没有它,测试将无法编译 - 这对于短期测试来说很好,但是对于更长的测试方法而言却变得很痛苦。我们已经尝试在源代码中添加一个明确的#light,但这似乎没有任何区别。这是一个包含许多模块的大型项目的一部分,除了测试模块之外,所有模块都很乐意使用轻量级语法(没有任何明确的#light)。什么在测试模块中触发完整语法?
答案 0 :(得分:2)
在编写类的成员时,您需要使用一些不同的缩进。以下应该没问题:
[<TestFixture>]
type ``Given a valid file`` () =
let myFile = createSomeFile()
[<Test>]
member x.``Processing the file succeeds`` () =
let actual = processFile myFile
actual |> should be True
第一个问题是成员的名称应该比.
缩进,第二个问题是成员的主体应该比member
关键字缩进 - 在你的版本中,关键字是在[<Test>]
之后写的,所以如果你进一步缩进主体,它就会起作用。
添加in
解决了这个问题,因为它更明确地告诉编译器如何解释代码(因此它不依赖于缩进规则)。
除了 - 使用一些单元测试框架,也可以使用module
,这会给你一些更轻的语法(但我不知道如果你需要一些初始化,它是如何工作的 - 即加载文件):
[<TestFixture>]
module ``Given a valid file`` =
let myFile = createSomeFile()
[<Test>]
let ``Processing the file succeeds`` () =
let actual = processFile myFile
actual |> should be True