Asp.net mvc ASP.NET MVC:正在尝试测试帮助程序方法,但遇到问题;“重置”;我的物品

Asp.net mvc ASP.NET MVC:正在尝试测试帮助程序方法,但遇到问题;“重置”;我的物品,asp.net-mvc,unit-testing,dbcontext,Asp.net Mvc,Unit Testing,Dbcontext,我正在尝试使用ASP.NET MVC在VS2012 Web Express中使用测试项目测试助手方法。我不想使用常规数据库进行测试,因此我已在App.Config中向测试项目添加了以下内容: <connectionStrings> <add name="MyConnection" connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\UnitTest.mdf;Int

我正在尝试使用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>
这很好,我正在使用我的测试数据库,并且创建了所有正确的对象。但是,当我初始化包含要测试的方法的类时,问题就出现了。因为TestUserClass也使用数据库,所以它也会像这样初始化数据库

//In the class TestUserClass 
MyDatabase db = new MyDatabase();
MyDatabase类如下所示:

[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
}
public class MyDatabase : DbContext
{
    public MyDatabase()
        : base("MyConnection")
    {
        Database.SetInitializer<MyDatabase>(new DropCreateDatabaseIfModelChanges<MyDatabase>());
    }

    public DbSet<UserGroup> UserGroups { get; set; }
}
公共类MyDatabase:DbContext { 公共数据库() :base(“MyConnection”) { SetInitializer(新的DropCreateDatabaseIfModelChanges()); } 公共数据库集用户组{get;set;} } 当我初始化要测试的类时,问题就出现了。在此之前,我的db对象包含所有正确的对象,但在初始化TestUserClass并因此创建另一个MyDatabase对象之后,db对象不包含任何内容(所有正确的集合都在那里,它们只是空的)

我假设问题是我再次初始化了MyDatabase对象(显然是?)。但我不知道如何解决这个问题。这是我的应用程序设计、单元测试的问题,还是我只是缺少了一些愚蠢的小代码,允许我在不初始化数据库的情况下使用数据库,从而重置对象

致以最良好的问候,并提前向您表示感谢

Andreas

回答我自己的问题(我不知道它实际上是如何工作的,尝试和错误FTW)。我向TestUserClass添加了一个重载构造函数:

public UserManagement()
{
   db = new RefusionsDatabase();
}

public UserManagement(RefusionsDatabase dbIn)
{
   db = dbIn;
}
并将TestUserClass的初始化移到MyDatabase初始化之后(不确定为什么需要这样做,但确实如此)

现在它开始工作了

希望它能帮助别人

安德烈亚斯

PS:如果有人知道这是为什么,知道一个更好的解决方案,或者对设计有意见,我会很高兴,因为没有解释它很奇怪

MyDatabase db = new MyDatabase();
TestUserClass tuc= new TestUserClass(db);