我有一些脚本文件setup.fsx的功能 我想测试一下。 xUnit和类似需要测试的函数是程序集的一部分。
所以我想将我的脚本从setup.fsx重命名为setup.fs扩展名,然后从另一个脚本文件加载它。但后来我的脚本取决于
#r "System.Xml"
#r "System.Xml.Linq"
然后我必须在调用脚本中指定(远离依赖实际出现的位置)
有没有基于xUnit worflow中的脚本集成测试? 建议用什么组织编写脚本文件测试?
(可能我们需要一个visual studio扩展,用于脚本中的测试,而不是在汇编中。)
答案 0 :(得分:2)
即使您只是将fsx
脚本添加到Visual Studio,您仍然可以将setup.fsx
与其他(可能是fs
)文件一起编译到正常项目中,因此您应该能够将脚本保存为Visual Studio中的普通脚本文件,同时从项目或构建测试的命令行工具中引用它。
我尝试使用以下test.fsx
文件执行此操作:
module Demo
#r "System.Xml.Linq.dll"
open System.Xml.Linq
let test () =
let d = XDocument(XElement(XName.Get("foo")))
d.ToString()
您在开头肯定需要一些module Name
声明(以便您可以从其他文件访问函数),但除此之外它可以是任何fsx
文件。我使用的另一个文件是test.fs
:
module Main
open Demo
test() |> printfn "%A"
这仅用于测试,但在这里您可以编写单元测试。如果使用以下命令编译文件,则可以获得可以传递给xUnit的标准程序集(注意,编译器可以从#r
中选择test.fsx
标记,我们不必明确地编写引用):
fsc.exe --target:library test.fsx test.fs
我认为如果你添加一个库项目,然后在{{1文件:
fsproj
请注意,当您使用&#34;添加项目&#34;添加<Compile Include="..\Eslewhere\In\Your\Project\Tree\File.fsx">
<Link>File.fsx</Link>
</Compile>
文件时,会将其标记为&#34;包括&#34;但不是&#34;编译&#34;,所以它不会被编译为项目的一部分。上面应该在项目中包含它,它应该告诉编译器也将它包含在编译的程序集中。
警告:表示,我认为使用标准单元测试测试刚编译的fsx
文件可能会更好。如果你想测试dll
个文件,我会在最后添加几行作为测试并手动运行(select,fsx
+ Alt
)。原因是Enter
文件应该经常更改,因此进行过于严格的测试可能会限制您的灵活性。另一方面,一旦代码变得更加可靠,将其移动到fsx
文件是有意义的。
答案 1 :(得分:0)
我认为最简单的解决方案是获取您想要测试的代码并将其放在单独的*.fs
文件中。在*.fsx
脚本中,您可以使用#load
指令从*.fs
文件加载代码(#load
与C / C ++中的#include
类似)。
对于单元测试,您可以创建一个简单的F#库项目,其中包含使用*.fs
的{{1}}文件(如Tomas的答案),然后针对编译的DLL运行单元测试。