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を使用できますか?
はい、できます。テストで参照している構成が実際にテストプロジェクトのapp.config
に存在することを確認する必要があります。
つまり、テストが含まれるプロジェクトには、"FertigungRead"
で接続文字列app.config
が定義されていません。
これを行う1つの方法は、テスト対象のシステムのapp.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>
ポイントを追加したいと思います。 nunitのドキュメントに注記があり、使用シナリオに応じて構成ファイルの命名と配置を行う必要があります。私はしばらくの間この問題に悩まされていました。
ドキュメンテーションは言う:
単一のアセンブリがロードされている場合、構成ファイルには、構成拡張子が付いたアセンブリファイルの名前が付けられます。たとえば、使用される構成ファイルnunit.tests.dllを実行するには、nunit.tests.dll.configという名前を付け、dllと同じディレクトリに配置する必要があります。
NUnitプロジェクトがロードされている場合、構成ファイルは、拡張子がconfigに変更されたプロジェクトファイルの名前を使用します。たとえば、プロジェクトAllTests。 nunitには、AllTests.nunitと同じディレクトリにあるAllTests.configという名前の構成ファイルが必要です。 Visual Studioプロジェクトまたはソリューションをロードするときも、同じルールに従います。
テストプロジェクトとメインプロジェクトの構成が同じである限り、単体テストは引き続き機能します。
テストプロジェクトでビルド前イベントを使用して、アプリケーションの構成ファイルをテストプロジェクトにコピーすることをお勧めします。これにより、2セットの構成を維持する必要がなくなります。
$(SolutionDir)path-to-main-project\Web.config $(ProjectDir)App.configをコピーします
私の答えを参照してください nunit and configs 設定ファイルの名前をnunitに伝える必要があります。デフォルトでnamespace.configを検索します。
SqlConnectionが機能するかどうかを確認するためにユニットテストが必要なのはなぜですか? Microsoftではなく、コードをテストする必要があります。ユニットテストでも、接続文字列が正しいかどうかを確認する意味がわかりません。単体テストで使用される構成は、本番コードで使用される構成と同じではありません。
ただし、一般に、単体テスト用の構成データが必要な場合は、テストプロジェクトにapp.configファイルを作成します。 appSettings要素やconnectionStrings要素などに、テスト環境に適した値を入力します。ただし、ConfigurationManagerまたはSqlConnectionが機能するかどうかをわざわざテストしないでください。維持する必要のあるコードを作成するだけですが、実際に作成している本番コードは検証されません。
男は見てください: 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"];
テストが実行されるプロジェクトで構成ファイルが使用される場合、特定の命名規則に従う必要があります。
構成ファイル名は、構成拡張子が付いたアセンブリファイルの名前にする必要があります。たとえば、MyUnitTest.tests.dll
の実行に使用される構成ファイルの名前はMyUnitTest.tests.dll.config
で、MyUnitTest.nunit
と同じディレクトリにある必要があります。
また、以下のようなプレビルドでこれを構成できます
copy $(SolutionDir)path-to-main-project\Web.config $(ProjectDir)App.config