我正在尝试使用 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>
设置我的单元测试看起来像这样:
[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 对象(显然?)。但我不确定如何解决这个问题。这是我的应用程序设计、单元测试的问题,还是我只是错过了一些愚蠢的小代码,允许我在不初始化数据库的情况下使用数据库并因此重置对象?
最好的问候,并在此先感谢您!
安德烈亚斯