25

プロジェクトの単体テストを作成しようとしていますが、構成マネージャーを使用できません。現在、私のプロジェクトは次のように設定されています

ASP.Net アプリケーション (すべての aspx ページ)

ProjectCore (すべての C# ファイル - モデル)

ProjectTest (すべてのテスト)

私の ProjectCore では、System.Configuration から ConfigurationManager オブジェクトにアクセスし、プロジェクトに情報を渡すことができます。ただし、ConfigurationManager が関与するテストを実行すると、エラーが発生します。

System.NullReferenceException: Object reference not set to an instance of an object.

これがテストの例です

using System.Configuration;

[TestMethod]
public void TestDatabaseExists()
{
    //Error when I declare ConfigurationManager
    Assert.IsNotNull(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString
}

私の他のテストでは、 ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString は、データ アダプターの構成文字列を設定したものであり、テストでは null エラーを返しますが、実際に Web サイトを使用するときは返しません。何か案は?

4

5 に答える 5

29

これは、いくつかの問題のいずれかである可能性があります。

  1. ProjectTest プロジェクトに app.config を追加していません。
  2. app.config に接続文字列を追加していません。

于 2013-07-10T20:52:13.620 に答える
3

単体テストを行っており、単体テストでは、集中力はテストしようとする特定の方法である必要があり、無関係な依存関係を削除する必要があります。この場合、mocking/moleing(Microsoft Mole と Pex を使用)system.configurationクラスを試してください。それは確かな解決策を提供します。

私が言っているのは、MS mols-and-pex をインストールしたら、-> テスト プロジェクト ソリューションに -> システム アセンブリを右クリックして、[mole の作成] を選択することです。

これにより、構成クラスのモール化されたバージョンが提供され、そのバージョンがモック化されたバージョンになりますconfiguration class。これを使用して、直面している問題を回避できます。

于 2013-07-10T20:52:32.973 に答える
2

次のような特別な構成パスを使用することもできますExeConfigurationFileMap

// Get the machine.config file.
ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
// You may want to map to your own exe.config file here.
fileMap.ExeConfigFilename = @"C:\test\ConfigurationManager.exe.config";
// You can add here LocalUserConfigFilename, MachineConfigFilename and RoamingUserConfigFilename, too
System.Configuration.Configuration config = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
于 2016-09-06T12:41:45.520 に答える