我创建了一个包含2个项目的解决方案,FSharpCalled
(包含方法" disBonjour",在另一个中转换字符串),F#库和FSharpTest,如下所示:
这里有FSharpCalled:
问题在于我无法进行测试;如第一个屏幕截图所示,我收到一条错误消息,指出"主模块为空,因此执行时不会发生任何事情"。
我试图修改一些属性但没有成功。
编辑:
这是结果......该死的!
答案 0 :(得分:3)
当您在类中使用let
绑定时,let
绑定是私有的(即不可公开访问)。因此,您不能将其用作测试方法。
如果您想将NUnit与F#中的类一起使用,则必须使用[<Test>]
属性来装饰方法:
[<TestFixture>]
type TestClass() =
[<Test>]
member this.SomeTest () =
// Test goes here
()
上次我使用NUnit时,你还 将[<TestFixture>]
属性添加到类本身,所以我也添加了它。通常,我不使用NUnit,所以我不知道它是否仍然需要。
您也可以在模块中编写测试,在这种情况下,您可以使用let
属性来装饰[<Test>]
绑定函数,因为在这种情况下它会编译为public,static member:
module MyTests =
[<Test>]
let ``a function in a module that works as a test`` () =
// Test goes here
()
至少,我使用的测试运行器(TestDriven.net)也发现并运行该测试。我不知道所有其他测试跑步者是否也会这样做。
有关使用F#进行单元测试的一般介绍,还有更多内容,您可以考虑观看我的Pluralsight course called Unit Testing with F#。
答案 1 :(得分:1)
如果您的控制台项目没有主模块为空,因此执行时不会发生任何事情
[<EntryPoint>]
,则会发生。因此,您需要声明这样的主方法或将项目更改为库项目。
更新
您是否使用任何第三方测试运行器(TestDriven,带有nUnit集成的ReSharper,...)或nUnit VS Test Adapter? VS无法识别开箱即用的nUnit测试。