2016-12-08 2 views
0

WebAPI2 WebサービスのテストケースにXUnitを使用しています。 私はApp_Dataテストユニットからのパス?

AppDomain.CurrentDomain.GetData("DataDirectory").ToString(); 

これは、アプリケーションが公開されたときに正しいパスを返し、通常どおりに実行しますが、私は私のテストを実行しているとき、それはApp_Dataへのパスを返しませんを使用してApp_Dataディレクトリを取得するための呼び出しを持っていますディレクトリ。

私はこの例外を取得:Object reference not set to an instance of an object.

任意のアイデア私はこれを行うことができますか?テストプロジェクトにApp_Dataディレクトリを追加しようとしましたが、同じ例外が発生しました。

これは、私がアクセスする必要がある暗号化ユーティリティ用のXML設定ファイルを格納する場所です。私はそれを根に移動すべきですか?私がそれをしたら、テストユニットからどのようにアクセスするのですか?

+1

ユニットテストよりも統合テストに似ています...ユニットテストでは、App_Dataには何も必要ありませんか?それで、私はテストプロジェクトをどのようにマップするのか分かりませんが、もし私が統合テストを行っていたら、おそらくconfigの情報を直接テストアプリケーションに直接渡すでしょう(例えば、ハードコード/モック)。実際の設定を読み込もうとしているのです。 – jleach

+0

@ jdl134679、私は先に進んで、私のapp.configとWeb.configの両方で設定の設定をしました。ポイントを得るための答えとして投稿してください。 – MB34

+0

完了、ありがとう... – jleach

答えて

-2

、それはapp.configをから引くでしょう。

+0

これはこれを行う方法ではありません。ユニットテストは設定ファイルを持たないようにしてください。 –

+0

@AndreiDragotoniu - 私は同意しません(私のアップノートの1つは私のものです)、私はOPに元々コメントしました。つまり、彼がXUnitを使用しているからといって、ユニットテストではなく統合テストを書いているわけではありません(統合テストは、この設定が必要なものを分類するものです)。 – jleach

+0

ところで、テストには、App_Dataディレクトリに格納されているテンプレートが必要です。これは、テストユニット内でのそのディレクトリの許容される使用です。 – MB34

2

このため、構成データの取得を抽象化することをお勧めします。その実装は、ディスク上のApp_Dataフォルダに行くだろう

public interface IConfigurationData 
{ 
    string RetrieveConfigurationData() 
} 

:あなたは、より多くのようなものが必要な場合は

は、1つ以上のメソッドとのインタフェースを記述します。 ユニットテストでは、そのインターフェイスを模擬し、テストに必要な設定を取得します。

ユニットテストは、ファイルやデータベース、サードパーティのAPIなどの外部システムには触れていません。それらを抽象化して、RhinoMocksやMoq、NS substituteのような何かを使って模倣します。

この理由は、単体テストをできるだけ早く実行させるためです。ファイルのような実際のシステムを導入する瞬間、それらはそれほど速くはなく、単体テストを増やすと実行時間が長くなります。理想的には、単体テストを数秒で実行したいので、開発プロセスを遅らせることなく、何回でも実行できます。あなたは(app.configとして)テストプロジェクトに設定をコピーしてSystem.Configuration.ConfigurationManager.AppSettings["SettingName"]を使用する場合はMVCプロジェクトを使用して実行しているときに、テストプロジェクトとweb.configを使用して実行しているとき

+0

+1、スピードの問題よりも重要な理由は、単体テストは非常に微妙なロジックをターゲットにする必要がありますが、これはさらに微妙ですが、最終的にはlongrunでの使用が増えています(例えば、ディスクや他の場所からの外部依存関係はほとんどないはずです)。 – jleach

+0

ところで、テストには、App_Dataディレクトリに格納されているテンプレートが必要です。これは、テストユニット内でのそのディレクトリの許容される使用です。 – MB34

関連する問題