我在整个项目中使用Entity Framework 4,Ninject和Moq。当我得到使用EF4的服务类的内容时,我实例化了一个数据上下文 - 这很糟糕。
我想将数据上下文注入我的服务中,因此我的单元测试可以对模拟数据上下文起作用。我之前用nHibernate完成了这个,但我无法用EF4解决这个问题,而且我无法在网上找到一个可靠的例子。
有人能指出我的工作解决方案和例子吗?非常感谢!
答案 0 :(得分:4)
推荐的方法是使用内存数据库进行测试(使用SQLite),类似于NHibernate 3.0 cookbook中描述的测试NHibernate的技术。
您还可以查看here,了解有关创建虚假DbContext的说明。
答案 1 :(得分:0)
在我的公司中,我们使用带有TransactionScope的本地开发数据库来回滚更改。测试插入时,独特的副作用是增加身份,但这不是问题。
优点是您可以对数据库进行真正的测试。
如果您需要发送电子邮件或将数据发送到另一台服务器,请使用ninject / moq返回依赖注入的IoC。
您需要将实体框架和连接字符串添加到测试项目中。
[TestClass]
public class NameValueTest
{
[TestMethod]
public void Create()
{
NameValueController controller = new NameValueController();
using (var ts = new TransactionScope())
{
Assert.IsNotNull(controller.Create(new Models.NameValue()
{
name1 = "1",
name2 = "2",
name3 = "3",
name4 = "4"
}));
//no complete, automatically abort
//ts.Complete();
}
}
}
我希望这可以帮到你。