我有一些脚本文件setup.fsx的功能 我想测试一下. xUnit和类似需要测试的函数是程序集的一部分. 所以我想将我的脚本从setup.fsx重命名为setup.fs扩展名,然后从另一个脚本文件加载它.但后来
我想测试一下.
xUnit和类似需要测试的函数是程序集的一部分.
所以我想将我的脚本从setup.fsx重命名为setup.fs扩展名,然后从另一个脚本文件加载它.但后来我的脚本依赖于
#r "System.Xml" #r "System.Xml.Linq"
然后我必须在调用脚本中指定(远离依赖实际出现的位置)
无论如何都要在xUnit worflow中集成基于脚本的测试吗?
建议用什么组织编写脚本文件的测试?
(可能我们需要一个visual studio扩展,用于脚本中的测试而不是汇编…)
即使您只是将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()
你一定在开头需要一些模块Name声明(这样你就可以从其他文件访问函数),但是它可以是任何fsx文件.我使用的另一个文件是test.fs:
module Main open Demo test() |> printfn "%A"
这仅用于测试,但在这里您可以编写单元测试.如果使用以下命令编译文件,则可以获得可以传递给xUnit的标准程序集(注意,编译器可以从test.fsx中选择#r标记,我们不必显式编写引用):
fsc.exe --target:library test.fsx test.fs
我想你可以在Visual Studio中获得相同的配置,如果添加一个库项目,然后在fsproj文件中使用类似的东西手动添加文件的链接(可以指向解决方案结构中的其他位置的文件):
<Compile Include="..\Eslewhere\In\Your\Project\Tree\File.fsx"> <Link>File.fsx</Link> </Compile>
请注意,使用“添加项目”添加fsx文件时,它会标记为“包含”但不会标记为“编译”,因此不会将其编译为项目的一部分.上面应该在项目中包含它,它应该告诉编译器也将它包含在已编译的程序集中.
警告:那说,我认为使用标准单元测试测试刚编译的dll文件可能更好.如果你想测试fsx文件,我会在最后添加几行作为测试并手动运行(select,Alt Enter).原因是fsx文件应该经常更改,因此进行过于严格的测试可能会限制您的灵活性.另一方面,一旦代码变得更加可靠,将其移动到dll文件是有意义的.