【发布时间】:2016-10-26 21:12:39
【问题描述】:
我正在使用 VSCode 和 Ionide 软件包套件在 F# 中创建控制台应用程序。我需要向应用程序添加单元测试,以便当我ctrl+shift+p FAKE: Build 项目时,测试在构建过程中运行。
我创建了一个dummy project in Github 作为示例。
最初,test 目录不存在。我创建了test 目录并在该文件夹中创建了第二个项目TestProj.Test(事后看来,我应该使用更具描述性的名称)用于测试目的。我将TestProj 中的.fsproj 文件添加到此项目中,以便我可以引用SimpleFunctions.fs。 NUnit.Framework 和 FsUnit 添加到 TestProj.Test。 Test.fs 包含两个简单的测试。
我有意将 TestProj.Test 创建为 F# library,因为我在 SO 上读到测试项目需要是一个库而不是控制台应用程序。
我在默认的build.fsx file that comes from Ionide. 中添加了第 9、31-37 和 47 行。但是,当我构建整个项目(即TestProj)时,构建失败并出现以下错误:
1) System.Exception: NUnit: cannot run tests (the assembly list is empty).
at Fake.NUnitSequential.NUnit(FSharpFunc`2 setParams, IEnumerable`1 assemblies) in C:\code\fake\src\app\FakeLib\UnitTest\NUnit\Sequential.fs:line 22
at FSI_0005.Build.clo@31-3.Invoke(Unit _arg3)
at Fake.TargetHelper.runSingleTarget(TargetTemplate`1 target) in C:\code\fake\src\app\FakeLib\TargetHelper.fs:line 492
Line 22 of the Sequential.fs 表示assemblies 为空。
我做错了什么?我应该如何设置build.fsx 文件以便TestProj.test 中的测试成功运行?或者,TestProj.Test 中的 Tests.fs 文件是否有问题?这似乎特别困难;有没有更简单的方法来包含使用 VSCode、Iondide 和 F# 自动运行的测试?
【问题讨论】:
-
您的 'Test' 目标正在寻找 'NUnit.Test.*.dll' 而 'TestProj.Test' 会生成一个同名的 dll。顺便说一句,您的项目结构还有一些其他可能的改进。如果你愿意,我会在 EOD WEST 之前提出 PR。
-
要建立一个成熟的 F# 项目,包括文档,您可以查看ProjectScaffold
-
我以前使用过 ProjectScaffold,但其中包含的内容太多,我不需要也不理解。我希望避免这种情况,但如果我无法自行启动并运行测试框架,我可能不得不使用它。另外,也许现在还为时过早,但我不明白您在这里使用的缩写“PR”、“EOD”和“WEST”。请解释一下?
-
对不起,那堵缩写墙 :-) PR = Pull R为您的存储库请求,EOD = End Of Day,WEST =西欧夏令时间。答案有帮助吗?
-
您的评论帮助微乎其微,但那是因为我不明白所有部分是如何组合在一起的!也可以,PR 会很有帮助!
标签: unit-testing f# visual-studio-code f#-fake ionide