5

スクリプトファイルsetup.fsxでいくつかの機能があります。それらをテストしたいと思います。xUnitなどは、アセンブリの一部としてテストする関数を必要とします。

そのため、スクリプトの名前をsetup.fsxからsetup.fs拡張子に変更してから、別のスクリプトファイルからロードすることを考えています。しかし、私のスクリプトは

#r "System.Xml"
#r "System.Xml.Linq"

次に、呼び出し元のスクリプトで指定する必要があります(依存関係が実際に発生する場所から離れて)

xUnitワークフローのスクリプトに基づいてテストを統合する方法はありますか?スクリプトファイルのテストを作成するために提案されている組織は何ですか?

(アセンブリではなくスクリプトでのテストには、Visual Studio拡張機能が必要な場合があります。)

4

2 に答える 2

2

スクリプトを Visual Studio に追加しただけでも、他の (おそらく ) ファイルと一緒に通常のプロジェクトにfsxコンパイルできるため、スクリプトを Visual Studio で通常のスクリプト ファイルとして保持できると同時に、プロジェクトから、またはテストをビルドするコマンド ライン ツールから参照します。setup.fsxfs

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

ライブラリ プロジェクトを追加してから、ファイル内の次のようなものを使用してファイルへのリンク (ソリューション構造の他の場所にあるファイルを指すことができます) を手動で追加すると、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ファイルに移動することは理にかなっています。

于 2012-07-02T14:20:40.573 に答える
0

最も簡単な解決策は、テストしたいコードを別の*.fsファイルに入れることだと思います。*.fsxスクリプトでは、#loadディレクティブを使用して*.fsファイルからコードをロードできます ( C /C++#loadのように動作します)。#include

単体テストの場合、 (Tomas の回答のように)*.fsを使用してファイルを含む単純な F# ライブラリ プロジェクトを作成<Link>し、コンパイルされた DLL に対して単体テストを実行できます。

于 2012-07-03T10:51:32.150 に答える