2017-03-11 17 views
0

私は検索しましたが、回答が得られませんでした。私は2つのASP.NETプロジェクトを持っています。そのうちの1つは私のプロジェクト、もう1つはユニットテストを含むプロジェクトです。 Project.CoreC#単体テスト内にConfigurationManagerを挿入

# Projects 
Project.Core 
    ... 
    secretConnectionStrings.config 
    Web.config 

Project.Tests 

、私はsecretConnectionStrings.configからの接続文字列(とweb.configファイルから設定アプリの両方を要求する方法を持っている。それ自身の上で実行される、正しい値は、これらの設定ファイルの両方から引っ張られます。しかし、私は私のユニットテストの中にこれをテストしたい

私のテストでは、このようになります(Project.Tests以内):。

[TestClass] 
public class TestUserController 
{ 
    [TestMethod] 
    public void Post_ShouldReturnNewUser() 
    { 
     var controller = new UserController(); 

     var result = controller.Post() as User; 
     Assert.AreNotEqual(result, null); 
    } 
} 

アウトのラインがそれ爆弾は、この

です
string cacheConnection = ConfigurationManager.ConnectionStrings["RedisCache"].ConnectionString; 

System.NullReferenceException:オブジェクト参照オブジェクト

のインスタンスに設定されていない私は私のProject.Tests溶液中のリンクとしてweb.configsecretConnectionStrings.configを追加しようとしました。それはうまくいきません。私はweb.configにインターフェイスしたくありません。(値はProject.Coreに保存されていますから)。私はProject.Coreのweb.configからユニットテストに値を引き出すことができる解決策がありますか?

+0

ユニットテストは別のプロジェクトにあります。そのプロジェクトに接続文字列を追加する必要があります。 – kat1330

+0

これに頼る方法はありませんか?私は2つのプロジェクトの2つの設定ファイルを維持することによって失敗する可能性のある別のものを紹介したくありません。 – Zac

+0

実際のコードでラッパーを使用し、単体テストでラッパーを偽装してConfigurationManagerのラッパークラスを作成することを検討しましたか? – lilactiger89

答えて

1

ユニットテストを含むプロジェクトには、ConfigurationManagerが接続文字列をプルするための独自の設定ファイルが必要です。

Add Linked File

ドン:configファイルのこのアップキープは1つのだけのコピーを設定する最良の方法は、リンク先のファイルとしてそれを必要とする各プロジェクトに同じファイルを追加し、それを追加することです Build Action

そして、あなたのテスト・フィクスチャ(複数可)に展開アイテムとして追加:「tはそれが実行可能コードに展開するようにファイルのプロパティを設定するのを忘れ

[TestClass] 
[DeploymentItem(@"db.config")] 
public class MyTestFixture { ... } 

:あなたは2つの異なって名前の設定ファイル(app.config & web.config)での集中接続文字列を持つようにしたい場合はさて、あなたは、他の設定ファイルのそれぞれにファイルを3番目のファイルdb.configとインポートでそれらを配置することができますdb.config

<connectionStrings> 
    <add name="testDb" connectionString="data source=(localdb)\v11.0;..." 
     providerName="System.Data.SqlClient" /> 
</connectionStrings> 

App.configファイル/ web.configファイル

<connectionStrings configSource="db.config" /> 

app.configまたはweb.configに加えて、インポートされた設定ファイルの出力先ディレクトリにコピーを設定し、それらの属性を使用してデプロイメント項目としてテストフィクスチャに追加してください。

+0

この設定ファイルの内容を 'app.config'に入れる方法はありますか?テストプロジェクトでは、configファイルのように、リンクされたファイルの名前が 'web.config'の場合、変更が適切に反映されますか? – Zac

+0

私はあなたの例に従っており、同じエラーが発生しています。ユニットテストが 'app.config'を探していて、設定ファイルの別の名前を使うことができないからです。 – Zac

+0

答えが異なる名前の設定ファイルを扱うように更新されました。 –