在 VSCode 中向 F# 项目添加单元测试
Adding unit tests to a F# project in VSCode
我正在使用 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 测试项目需要是一个库而不是控制台应用程序。
我将第 9、31-37 和 47 行添加到默认 build.fsx
file that comes from Ionide.。但是,当我构建整个项目(即 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#
一起进行的测试?
您的项目中存在一些问题:
在构建前尝试测试 "Clean" ==> "Test" ==> "Build" ==> "Deploy"
=> 将目标依赖项更改为 "Clean" ==> "Build" ==> "Test" ==> "Deploy"
用于测试的单独数据包配置(paket.dependencies、paket.lock 在 test
子文件夹中)导致引用依赖项的版本不一致
=> 从 test
中删除 paket.dependencies
和 paket.lock
NUnit 版本的有害组合
=> 从 paket.dependencies
和 运行 paket.exe install
中删除对 NUnit.Framework
的明确引用
测试项目中的类型扩展无效
=> 更改为 type Test()
或删除无用文件
building 在 ./build
中创建 all 项目(而不仅仅是 src/app
)的输出,但测试在 [=] 中查找 DLL 22=]
=> 将测试文件模式更改为 buildDir + "**/*.Test.dll"
如果你想使用 NUnit3
=> open Fake.Testing
并使用 NUnit3
而不是 NUnit
最后,你应该commit paket.bootstrapper.exe
我建议您要么使用预定义的模板,要么从小处着手,确保您了解每个步骤并检查它是否按预期工作。一旦你 运行 超过了一个无效的解决方案,就很难回到正轨。
我正在使用 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 测试项目需要是一个库而不是控制台应用程序。
我将第 9、31-37 和 47 行添加到默认 build.fsx
file that comes from Ionide.。但是,当我构建整个项目(即 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#
一起进行的测试?
您的项目中存在一些问题:
在构建前尝试测试
"Clean" ==> "Test" ==> "Build" ==> "Deploy"
=> 将目标依赖项更改为"Clean" ==> "Build" ==> "Test" ==> "Deploy"
用于测试的单独数据包配置(paket.dependencies、paket.lock 在
test
子文件夹中)导致引用依赖项的版本不一致
=> 从test
中删除 NUnit 版本的有害组合
=> 从paket.dependencies
和 运行paket.exe install
中删除对 测试项目中的类型扩展无效
=> 更改为type Test()
或删除无用文件building 在
./build
中创建 all 项目(而不仅仅是src/app
)的输出,但测试在 [=] 中查找 DLL 22=]
=> 将测试文件模式更改为buildDir + "**/*.Test.dll"
如果你想使用 NUnit3
=>open Fake.Testing
并使用NUnit3
而不是NUnit
paket.dependencies
和 paket.lock
NUnit.Framework
的明确引用
最后,你应该commit paket.bootstrapper.exe
我建议您要么使用预定义的模板,要么从小处着手,确保您了解每个步骤并检查它是否按预期工作。一旦你 运行 超过了一个无效的解决方案,就很难回到正轨。