私が書いたアプリケーションをテストするのにNUnitを使いたいのですが、私が書いたユニットテストには環境や基盤データベースへの直接リンクがあります。開発機械ではなく、NUnit環境やデータベースではなく、アプリケーションをテストする
例を挙げておきます。
私は、別のアプリケーションによってレジストリに格納されている文字列を取得するという単一の責任を持つクラスを作成しています。キーはHKCU \ Software \ CustomApplication \ IniPathに保存されます。
テストの結果は次のようになります。 ":\ PROGRAMFILES \ CustomApplication \ SomeDir C" 今、実際には正しいです
[Test]
public void GetIniDir()
{
RegistryReader r = new RegistryReader();
Assert.AreEqual(@"C:\Programfiles\CustomApplication\SomeDir", r.IniDir);
}
は、しかし、ここでの問題は、@文字列があることです。明日は@ "C:\ Anotherdir \ SomeDir"に変わったかもしれませんし、コードが変わっていないのに突然私の単体テストが壊れてしまいます。
この問題は、データベースに対してCRUD操作を実行するクラスを作成した場合にも発生します。データベース内のデータは常に変化する可能性があり、テストが失敗します。だから私のクラスが意図したことをしても、データベースが最初にテストを書いたときに持っていたより多くの顧客を返すので失敗するでしょう。
周囲の環境にあまり依存しないテストを書く上でのヒントはありますか?
しかし、実際には単体テストではなく、統合テストです。 –