2016-12-30 3 views
1

ユニットテストプロジェクトとライブラリプロジェクトがあります。私はテンプレートとしてライブラリプロジェクトのpdfファイルを使用したいと思います。 Environment.CurrentDirectoryを使用すると、単体テストプロジェクトのパスが取得されますが、ライブラリプロジェクトのパスを参照してpdfファイルを取得する必要があります。ユニットテストからプロジェクトフォルダ内のパスを取得する方法

Path.Combine(Environment.CurrentDirectory, "../PDFs/template.pdf"); 

ユニットテストを実行すると、ライブラリプロジェクトのファイルへのパスを取得する同等の文は何ですか?

答えて

1

できません。単体テストプロジェクトには、元の "ソース"の場所についてはわからないbinフォルダに参照されているアセンブリのコピーがあり、があります。

ユニットテストは、ファイルシステム内の他の場所に存在するものに頼るのではなく(または、理想的にはファイルシステムや他の外部リソースに依存しないこと)、バキュームで実行できるはずです。

問題を解決する唯一の方法は、「template.pdf」が単体テストの出力ディレクトリにコピーされていることを確認することです。はるかに良いアプローチは単体テストプロジェクトにテンプレートを含めることです。

+0

提案したようにテストプロジェクトにテンプレートを追加した後、次のステートメントを使用してパスPath.GetFullPath(Path.Combine(Environment.CurrentDirectory、 "../../PDFs/template.pdf"))を取得しました。 – billboard

+0

@billboardそれはうまくいくように聞こえます(もう一度、ある時点で別の方法が見つかるはずです...)私の答えにそれを含めるべきだと感じましたか? – BradleyDotNET

+0

私はこれを答えとしてマークする前に、フォローアップの質問があるので、テンプレートをライブラリに保存することは役に立たない。なぜなら、ライブラリを使用している誰もファイルにアクセスできないからです。そのような場合、クライアントが間違ったテンプレートを使用する可能性があり、ライブラリが例外をスローします – billboard

関連する問題