Asp.net mvc ASP.NET MVC:正在尝试测试帮助程序方法,但遇到问题;“重置”;我的物品
我正在尝试使用ASP.NET MVC在VS2012 Web Express中使用测试项目测试助手方法。我不想使用常规数据库进行测试,因此我已在App.Config中向测试项目添加了以下内容: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
<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);