首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >F#的脚手架和FsUnit/FsCheck

F#的脚手架和FsUnit/FsCheck
EN

Stack Overflow用户
提问于 2015-04-22 04:54:28
回答 2查看 524关注 0票数 1

我正在努力开始使用ProjectScaffold在Linux上使用F#。具体地说:我不能让项目使用FsUnit/FsCheck/xunit。我使用的是Linux3.1和Mono3.12.1,我使用的是F# (Ubuntu) x64。

我以"MyProject“开头:

代码语言:javascript
复制
$ git clone --depth=1 git@github.com:fsprojects/ProjectScaffold.git
$ cd ProjectScaffold && ./build.sh

然后我在“src/MyProject/Library.fs”中添加了一些代码:

代码语言:javascript
复制
module MyProject.X

let four = 4

然后对“tests /MyProject.Tests/Tests.fs”进行两个测试:

代码语言:javascript
复制
module MyProject.Tests.X

open Xunit
open FsUnit.Xunit
open FsCheck
open FsCheck.Xunit
open MyProject.X

[<Fact>]
let ``Two plus two is four.`` () =
    2 + 2 |> should equal four

[<Property>]
let ``Sorting a sorted list is idempotent.`` (l: int list) =
    let s = List.sort l
    s = List.sort s

这段代码可以在Visual Studio上运行,我在Visual Studio中手动添加了FsCheck,FsUnit,anx xunit 1.9.2 (由于某些原因,它在以后的版本中失败了)。我在Windows/Visual Studio上的测试项目具有以下配置文件:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="FsCheck" version="1.0.4" targetFramework="net45" />
  <package id="FsCheck.Xunit" version="1.0.4" targetFramework="net45" />
  <package id="FsUnit.xUnit" version="1.3.0.1" targetFramework="net45" />
  <package id="xunit" version="1.9.2" targetFramework="net45" />
  <package id="xunit.runner.visualstudio" version="2.0.0" targetFramework="net45" />
</packages>

所以我编辑paket.dependencies来添加这些包并删除Nunit:

代码语言:javascript
复制
source https://nuget.org/api/v2

nuget FSharp.Formatting 2.8.0
nuget FSharpVSPowerTools.Core 1.7.0
nuget FAKE
nuget FsCheck 1.0.4
nuget FsCheck.Xunit 1.0.4
nuget FsUnit.xUnit 1.3.0.1
nuget xunit 1.9.2
nuget SourceLink.Fake

github fsharp/FAKE modules/Octokit/Octokit.fsx

然后:

代码语言:javascript
复制
$ mono .paket/paket.exe install

由于NUnit在某个地方被引用,所以它失败了,所以我删除了tests/MyProject.Tests/paket.references和

代码语言:javascript
复制
$ mono .paket/paket.exe install

有效,但是

代码语言:javascript
复制
$ ./build.sh

失败,它找不到对FsCheck等人的引用。所以我假设我需要手动添加引用,所以test/MyProject.Tests/paket.references现在是:

代码语言:javascript
复制
FsCheck
FsCheck.Xunit
FsUnit.xUnit
xunit

...built build.sh再次失败:找不到FsCheck。我在paket文档中找不到如何添加本地依赖项(MyProject.Tests应该引用MyProject),它可能是自动完成的。

EN

回答 2

Stack Overflow用户

发布于 2015-04-22 06:04:05

我遇到了这个问题,我花了一段时间才找到解决办法。对于Tests目录中的项目文件,我必须更改以下内容:

代码语言:javascript
复制
<Reference Include="FsUnit.NUnit">
    <HintPath>..\..\packages\FsUnit.1.3.0.1\Lib\Net40\FsUnit.NUnit.dll</HintPath>
    <Private>True</Private>
</Reference>

要这样做:

代码语言:javascript
复制
<Reference Include="FsUnit.NUnit">
    <HintPath>..\..\packages\FsUnit\Lib\Net40\FsUnit.NUnit.dll</HintPath>
    <Private>True</Private>
</Reference>

同样,对于NUnit:

代码语言:javascript
复制
<Reference Include="nunit.framework">
  <HintPath>..\..\packages\NUnit.2.6.3\lib\nunit.framework.dll</HintPath>
  <Private>True</Private>
</Reference>

至:

代码语言:javascript
复制
<Reference Include="nunit.framework">
  <HintPath>..\..\packages\NUnit\lib\nunit.framework.dll</HintPath>
  <Private>True</Private>
</Reference>

问题是,在mono上,包的path中没有版本,但在Visual Studio中有。找到这个修复后,我为测试创建了两个.fsproj文件,并修改了build.sh脚本,以便在mono下通过以下方式交换与mono兼容的文件:

代码语言:javascript
复制
#!/bin/bash
if test "$OS" = "Windows_NT"
then
  # no changes in here
else
  # fix test fsproj file
  mv tests/ProjectName.Tests/ProjectName.Tests.fsproj tests/ProjectName.Tests/ProjectName.Tests.fsproj.vs
  mv tests/ProjectName.Tests/ProjectName.Tests.fsproj.mono tests/ProjectName.Tests/ProjectName.Tests.fsproj  

  # leave the script logic for mono in place

  # put project files back to avoid git noticing the swap
  mv tests/ProjectName.Tests/ProjectName.Tests.fsproj tests/ProjectName.Tests/ProjectName.Tests.fsproj.mono
  mv tests/ProjectName.Tests/ProjectName.Tests.fsproj.vs tests/ProjectName.Tests/ProjectName.Tests.fsproj

fi

一旦我做了这些更改,这个项目在Visual Studio和mono下都能很好地工作。

票数 1
EN

Stack Overflow用户

发布于 2015-04-22 13:28:32

我不太确定,我理解您:您是否有两个fsproj文件,一个用于生产代码,另一个用于单元测试?您是否在fsproj中引用了FsCheck?

此外,我还记得一个问题,如果您针对较旧版本的.net进行编译,并引用针对较新版本的.net编译的程序集,那么它的行为将如同没有引用一样。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29782929

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档