ASP.NET MVC を使用して、VS2012 Web Express のテスト プロジェクトを使用してヘルパー メソッドをテストしようとしています。通常のデータベースをテストに使用したくないので、次の App.Config をテスト プロジェクトに追加しました。
<connectionStrings>
<add name="MyConnection" connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\UnitTest.mdf;Integrated Security=True" providerName="System.Data.SqlClient" />
</connectionStrings>
Unittest のセットアップは次のようになります。
[TestMethod]
public void TestSomething()
{
MyDatabase db = new MyDatabase();
//Initialize objects and save them in the (test) database
db.SaveChanges();
//Initializing the class that contains the method I want to test
TestUserClass tuc= new TestUserClass();
//Calling the method I want to test
tuc.TestUserMethod (1, 1);
//Check the database if everything is correct
}
これは正常に機能しています。テスト データベースを使用しており、すべての正しいオブジェクトが作成されています。ただし、テストしたいメソッドを含むクラスを初期化すると問題が発生します。TestUserClass もデータベースを使用するため、このようなデータベースも初期化します
//In the class TestUserClass
MyDatabase db = new MyDatabase();
MyDatabase クラスは次のようになります。
public class MyDatabase : DbContext
{
public MyDatabase()
: base("MyConnection")
{
Database.SetInitializer<MyDatabase>(new DropCreateDatabaseIfModelChanges<MyDatabase>());
}
public DbSet<UserGroup> UserGroups { get; set; }
}
テストしたいクラスを初期化するとすぐに問題が発生します。その前に、私の db オブジェクトにはすべての適切なオブジェクトが含まれていましたが、TestUserClass を初期化して別の MyDatabase オブジェクトを作成した後、db オブジェクトには何も含まれていません (すべての適切なセットがそこにあり、それらは空です)。
問題は、MyDatabase オブジェクトを再度初期化することだと思います (明らかに?)。しかし、この問題を解決する方法がわかりません。アプリケーションの設計、単体テストに問題があるのでしょうか、それとも、データベースを初期化せずにオブジェクトをリセットせずに使用できるようにする、ばかげた小さなコードが不足しているだけなのでしょうか?
よろしくお願いします!
アンドレアス