如何EF4 + Ninject + Moq?

时间:2012-03-09 20:18:00

标签: entity-framework-4 mocking ninject moq

我在整个项目中使用Entity Framework 4,Ninject和Moq。当我得到使用EF4的服务类的内容时,我实例化了一个数据上下文 - 这很糟糕。

我想将数据上下文注入我的服务中,因此我的单元测试可以对模拟数据上下文起作用。我之前用nHibernate完成了这个,但我无法用EF4解决这个问题,而且我无法在网上找到一个可靠的例子。

有人能指出我的工作解决方案和例子吗?非常感谢!

2 个答案:

答案 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();
        }
    }
}

我希望这可以帮到你。