我最近在学习F#。今天我写了一些代码并尝试添加单元测试。
我计划创建两个项目,一个用于代码,另一个用于测试。
因此,我在Visual Studio 2015社区中创建了一个名为library(stringr)
matrix(str_count(aa, "A"), nrow=nrow(aa), ncol = ncol(aa))
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 2 4 0 4 2 4 2 0 4 0
[2,] 2 4 NA NA NA 4 2 0 4 0
[3,] NA NA NA NA NA 4 2 NA NA NA
[4,] 2 4 NA NA NA 0 4 2 4 0
[5,] 2 4 4 4 2 4 2 2 4 0
[6,] 2 4 4 0 4 0 4 2 4 4
[7,] 2 4 NA NA NA 0 2 2 4 4
[8,] 2 4 NA NA NA 0 4 2 4 0
[9,] 2 4 NA NA NA 0 4 2 4 0
[10,] 2 4 NA NA NA 0 3 2 4 1
的新解决方案,其中包含一个名为DataLab
的项目。然后我添加了另一个名为Source
的项目。
结构如下:
Test
Solution 'DataLab'
Source
Queue.fs
Test
QueueTest.fs
是:
Queue.fs
namespace DataLab
type Queue<'a> = Queue of 'a list * 'a list
module Queue =
let init<'a> : Queue<'a> = Queue ([], [])
是:
QueueTest.fs
然后VS警告我namespace DataLab.Test
module QueueTest =
open DataLab
open FsUnit
open NUnit.Framework
[<Test>]
let ``test Init`` () =
let expected : Queue<int> = Queue ([], [])
Queue.init<int> |> should equal expected
中的open
陈述。其中一个是:
未定义名称空间或模块“FsUnit”
所以我为QueueTest.fs
项目添加了对Source
项目的引用。我还通过NuGet为Test
项目安装了FsUnit
。
我没有安装Test
,因为它是NUnit
的依赖关系。
我没有为FsUnit
项目安装FsUnit
,因为Source
不需要测试库。
我想让它与maven中JUnit依赖的Source
类似。
我成功构建了整个解决方案。
当我在“测试资源管理器”中运行测试时(我还安装了“NUnit3测试适配器”扩展程序),我收到以下错误:
<scope>test</scope>
经过一些随机尝试后,我也通过将System.MissingMethodException : Method not found: 'DataLab.Queue`1<!0> DataLab.Queue`1.NewQueue(Microsoft.FSharp.Collections.FSharpList`1<!0>, Microsoft.FSharp.Collections.FSharpList`1<!0>)'.
安装到FsUnit
项目来成功执行测试。
我对这个问题有一个理论。
我安装了Source
,其依赖关系为FsUnit 2.0.0
。因此FSharp.Core (>= 3.1.2.5)
已安装到我的FSharp.Core 3.1.2.5
项目中。这污染了我的Test
文件。
我在Test.fsproj
中有以下行:
Test.fsproj
同时<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
<TargetFSharpCoreVersion>4.4.0.0</TargetFSharpCoreVersion>
<ItemGroup>
<Reference Include="FSharp.Core">
<HintPath>..\packages\FSharp.Core.3.1.2.5\lib\net40\FSharp.Core.dll</HintPath>
<Private>True</Private>
</Reference>
项目仍在使用VS 2015内置F#,其版本为4.0+。所以F#的两个版本冲突。
但我不知道如何证明它或如何解决它。