2012-05-23 23 views
7

私は、通常、実行中のプロジェクトのApp.configまたはWeb.configに保存されているいくつかの設定に依存するいくつかのヘルパークラスをテストしています。XunitのApp.config

設定は次のようになります。

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <appSettings> 
    <add key="FileNamePattern" value="\\d{8}_\\w{4:20}\.png"/> 
    <!-- and the likes --> 
    </appSettings> 
</configuration> 

私は(ジェンキンスCIサーバー上の)GUIランナー(xunit.gui.clr4.exe)とのxUnitコンソールランナーとxUnitフレーム1.9を実行していますよ。現在、xunit.gui.clr4.exe.configファイルとxunit.console.exe.configファイルを手動で設定することにより、これらの構成値をテスト環境に「注入」できます。しかし、これは面倒でエラーが起こりやすい。

私はこれらの構成設定をフィクスチャーでモックすることもできます。しかし、10の異なるファイルに同じフィクスチャを使用することは、むしろ反復的です。

テストプロジェクト用のApp.configファイルを提供するなど、xUnitでこれらの構成設定を擬似的に改善する方法はありますか?

+1

中間のISettingsを作成します。あなたはそれにapp.configを読み込むことができます。それでは、Moqのようなフレームワークを使ってインターフェイスをモックアウトするだけです。私は設定ファイルを可能な限り抽象化したいと思っています。 –

答えて

10

あなたのコードがapp.configであると仮定している場合、xUnit.netはそれらを1つ提供することでサポートしています(通常、テストがDLLファイルの場合、プロジェクト出力にAssemblyName.dll.configというファイルがあります)。ロード時に存在する場合はランナーが設定としてロードします)。

最初にそのような依存関係を取り除くためにDIの原則を使用することは明らかですが、実際には最初にテストを受ける前にコードを迷わないでください。

DRYを維持するには、app.configを中央に置き、リンクとして追加します(ダイアログの[開く]ボタンの矢印を使用)。 (はい、それについて好きしないようにたくさんあります - 。あなたはその最も邪悪なアプローチを感じた場合にのみ使用しますが)のために外を見るために


一つは、変更はしない限り、GUIのランナーにリロードされませんということですアセンブリの再読み込みを依頼してください。

+0

configは、TestNamespace.dll.configに名前を変更し、常にビルドディレクトリにコピーするように設定すると正常に動作します。ありがとう! –

+0

@ThachMai app.configは自動的に動作しないので、私はそれを残しても驚いています。私は個人的には常に疑いがありますが、ビルドシステムが実際にコピー/名前変更をしていないケースは見つけられませんでした。見た目があります(リロードするまで拾わないことを忘れないでください)。 –

+0

私はそれを試してみると、来週の火曜日に私がソースにアクセスしたときにあなたに戻ってきます。 –