FAKE + Nunit:找不到 nunit-console.exe

FAKE + Nunit: Can't find nunit-console.exe

我是 FSharp.Charting 的维护者。最近,我们的 FAKE 测试规则开始出现以下错误报告(具体来说,我正在调用 build.cmd RunTests)。 FAKE 似乎为 nunit-console 选择了错误的路径和 exe 名称,它位于 packages/NUnit.ConsoleRunner/tools/nunit3-console.exe。我不确定这是否是版本控制问题,或者我是否需要更新我的 build.fsx 脚本以说明对 FAKE and/or NUnit 的更改。任何指导将不胜感激。

System.Exception: Start of process c:\GitHub\FSharp.Charting_20180310\tools\Nunit\nunit-console.exe failed. The system cannot find the file specified
at Fake.ProcessHelper.ExecProcessWithLambdas@91-16.Invoke(String message) in C:\code\fake\src\app\FakeLib\ProcessHelper.fs:line 91
at Fake.ProcessHelper.ExecProcessWithLambdas(FSharpFunc2 configProcessStartInfoF, TimeSpan timeOut, Boolean silent, FSharpFunc2 errorF, FSharpFunc2 messageF) in C:\code\fake\src\app\FakeLib\ProcessHelper.fs:line 91 
at Fake.NUnitSequential.NUnit(FSharpFunc2 setParams, IEnumerable1 assemblies) in C:\code\fake\src\app\FakeLib\UnitTest\NUnit\Sequential.fs:line 26 
at FSI_0005.Build.clo@113-10.Invoke(Unit _arg6) at Fake.TargetHelper.runSingleTarget(TargetTemplate1 target) in C:\code\fake\src\app\FakeLib\TargetHelper.fs:line 626

paket.lock的一些相关内容:

FAKE (4.61.3) - framework: net40, net45, net461
NUnit (3.7.1) - framework: net40, net45, net461
NUnit.ConsoleRunner (3.6.1) - framework: net40, net45, net461
NUnit.Runners (3.6.1) - framework: net40, net45, net461
NUnit.ConsoleRunner (>= 3.6.1) - framework: net40, net45, net461

编辑:修复了build.cmd测试命令,并提供了明确的nunit-console路径。

根据@Charles Mager 的补充评论,有两种可能的解决方案:

  1. 感谢@TeaDrivenDev,我发现 FAKE (v4) 和 NUnit 之间存在版本不一致,无法下载最新的 v3 稳定版。这可以通过将 paket.dependencies 中的 NUnit 和 NUnit.Runners 限制到 2.6.3 或更高版本,最高 <3.0 来实现。

  2. 更新 build.fsx 以使用 NUnit3。这涉及 open Fake.Testing 并将 NUnit 调用更新为 NUnit3。此外,一些 NUnit 参数名称已更新或弃用。可以在 here.

  3. 中找到此方法的完整详细信息

我选择了解决方案 2,因为它让我们了解当前的 NUnit。