web-dev-qa-db-ja.com

NUnitとapp.configの問題

DBへの接続で簡単なテストを実行すると、NUnitでエラーを確認します。

[Test]
public void TestConn()
{
    string  connectionString = ConfigurationManager.ConnectionStrings["FertigungRead"].ConnectionString;
    SqlConnection connection = new SqlConnection(connectionString);
    connection.Open();
    Assert.AreEqual(ConnectionState.Open, connection.State);
    connection.Close();
 }

System.NullReferenceException:オブジェクト参照がオブジェクトのインスタンスに設定されていません。

オンライン:

connectionString = ConfigurationManager.ConnectionStrings["FertigungRead"].ConnectionString;

テストでConfigurationManagerを使用できますか?

33
Mike

はい、できます。テストで参照している構成が実際にテストプロジェクトのapp.configに存在することを確認する必要があります。

つまり、テストが含まれるプロジェクトには、"FertigungRead"で接続文字列app.configが定義されていません。

これを行う1つの方法は、テスト対象のシステムのapp.configをテストプロジェクトに追加することです リンクとして このようにして、両方のプロジェクトで変更が発生します。

26
Oded
  1. NUnit /プロジェクト/編集に移動します...
  2. [構成プロパティ]パネルで、[構成ファイル名]に移動します
  3. そこに置くyourAssemblyName。dll.config

注意:機能しない場合は、パスを追加してみてください。 bin\Debug\yourAssemblyName。dll.config

テストプロジェクトファイルyourAssemblyName。nunitが更新されます。

はい、テストプロジェクトのApp.configが、テストでアクセスするものと一致していることを確認してください。

[Test]
public void TestConn()
{
   var sss = ConfigurationManager.AppSettings["TestKey"];
}

App.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="TestKey" value="testKeyValue"/>
  </appSettings>
</configuration>
5
ivan_d

ポイントを追加したいと思います。 nunitのドキュメントに注記があり、使用シナリオに応じて構成ファイルの命名と配置を行う必要があります。私はしばらくの間この問題に悩まされていました。

ドキュメンテーションは言う:

単一のアセンブリがロードされている場合、構成ファイルには、構成拡張子が付いたアセンブリファイルの名前が付けられます。たとえば、使用される構成ファイルnunit.tests.dllを実行するには、nunit.tests.dll.configという名前を付け、dllと同じディレクトリに配置する必要があります。

NUnitプロジェクトがロードされている場合、構成ファイルは、拡張子がconfigに変更されたプロジェクトファイルの名前を使用します。たとえば、プロジェクトAllTests。 nunitには、AllTests.nunitと同じディレクトリにあるAllTests.configという名前の構成ファイルが必要です。 Visual Studioプロジェクトまたはソリューションをロードするときも、同じルールに従います。

http://www.nunit.org/index.php?p=configFiles&r=2.2.1

4

テストプロジェクトとメインプロジェクトの構成が同じである限り、単体テストは引き続き機能します。

テストプロジェクトでビルド前イベントを使用して、アプリケーションの構成ファイルをテストプロジェクトにコピーすることをお勧めします。これにより、2セットの構成を維持する必要がなくなります。

$(SolutionDir)path-to-main-project\Web.config $(ProjectDir)App.configをコピーします

3
Richard Everett

私の答えを参照してください nunit and configs 設定ファイルの名前をnunitに伝える必要があります。デフォルトでnamespace.configを検索します。

1
skyfoot

SqlConnectionが機能するかどうかを確認するためにユニットテストが必要なのはなぜですか? Microsoftではなく、コードをテストする必要があります。ユニットテストでも、接続文字列が正しいかどうかを確認する意味がわかりません。単体テストで使用される構成は、本番コードで使用される構成と同じではありません。

ただし、一般に、単体テスト用の構成データが必要な場合は、テストプロジェクトにapp.configファイルを作成します。 appSettings要素やconnectionStrings要素などに、テスト環境に適した値を入力します。ただし、ConfigurationManagerまたはSqlConnectionが機能するかどうかをわざわざテストしないでください。維持する必要のあるコードを作成するだけですが、実際に作成している本番コードは検証されません。

1
tvanfosson

男は見てください: http://nunit.net/blogs/?p=9

彼が示唆するように私はMyProjectTests.dll.configプロジェクトルートで、すべてが機能します。

私の設定ファイルの例は:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
     <add key="TestKey" value="Ok!"/>
</appSettings>
</configuration>

そして、私は単純なものを使用しています:ConfigurationManager.AppSettings["TestKey"];

1
Custodio

私は同じ状況にあり、app.configをNUnitプロジェクトに追加しようとしましたが、プロジェクトはそれを識別できませんでした。私にとってトリッキーな回避策は、アプリ構成を含むクラスライブラリを作成し、テストプロジェクトに変換することでした。結局のところ、すべてのNUnitとそのアダプターはNuGetパッケージであり、テスト用にクラスライブラリに追加でき、VisualStudioとResharperによって実行されたテストは完全に正常に機能します。

enter image description here

enter image description here

enter image description here

enter image description here

そして最後に私のテストをデバッグし、App.configテストプロジェクト内のファイル:

enter image description here

0
Ben

テストが実行されるプロジェクトで構成ファイルが使用される場合、特定の命名規則に従う必要があります。

構成ファイル名は、構成拡張子が付いたアセンブリファイルの名前にする必要があります。たとえば、MyUnitTest.tests.dllの実行に使用される構成ファイルの名前はMyUnitTest.tests.dll.configで、MyUnitTest.nunitと同じディレクトリにある必要があります。

また、以下のようなプレビルドでこれを構成できます

copy $(SolutionDir)path-to-main-project\Web.config $(ProjectDir)App.config 
0
manjula k m