关于f#:使用FsUnit创建测试类时,[<Test>]在成员上不是有效属性。为什么?

 2021-04-26 

When making a test class with FsUnit, [<Test>] is not a valid attribute on a member. Why?

我正在摆弄一个新的F#项目(我做的还不多),我的目标是以TDD方式进行。因此,由于我有很多在C#项目中使用NUnit的经验,因此我试图使自己熟悉FsUnit,这似乎是一个非常常见的框架。

我的代码如下:

1
2
3
4
5
6
7
8
9
10
11
module DatabaseReaderTest

open NUnit.Framework
open FsUnit

[<TestFixture>]
type DatabaseReaderTest ()=

    [<Test>]
    member x.ResultsAreReturnedFromDatabase =
        DatabaseReader.result.GetSqlString(1) |> should equal"first"

据我所知,这遵循FsUnit主页(http://fsunit.codeplex.com/)上的示例,但是编译器告诉我[<Test>]在此语言元素上不是有效的属性,我认为它表示成员。

关于我在这里做错什么的任何提示吗?

谢谢!


您可能需要使用方法而不是属性。只需添加类型为unit的()自变量即可。


请注意,如果在运行测试之前不需要任何自定义初始化,并且使用的是NUnit的最新版本,则应该可以将具有let绑定函数的模块用于您的测试。

这为您提供了更轻量级的语法。有些人还喜欢使用双击语法,使得可以将测试名称写成普通的英语句子(在测试运行器中很好地显示):

1
2
3
4
5
module DatabaseReaderTest =

  [<Test>]
  let ``Results are returned from database`` () =
    DatabaseReader.result.GetSqlString(1) |> should equal"first"