Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 4 如何使用EF4+Ninject+Moq?_Entity Framework 4_Mocking_Ninject_Moq - Fatal编程技术网

Entity framework 4 如何使用EF4+Ninject+Moq?

Entity framework 4 如何使用EF4+Ninject+Moq?,entity-framework-4,mocking,ninject,moq,Entity Framework 4,Mocking,Ninject,Moq,我在整个项目中使用EntityFramework4、Ninject和Moq。当我谈到使用EF4的服务类时,我实例化了一个数据上下文——这很糟糕 我想将数据上下文注入到我的服务中,这样我的单元测试就可以在模拟数据上下文中工作。我以前用过nHibernate,但我不能用EF4解决这个问题,我也不能在网上找到一个可靠的例子 有人能给我指出一个有效的解决方案和例子吗?多谢 推荐的方法是使用内存中的数据库来测试SQLite,类似于中描述的测试NHibernate的技术 您还可以查看创建假DbContext

我在整个项目中使用EntityFramework4、Ninject和Moq。当我谈到使用EF4的服务类时,我实例化了一个数据上下文——这很糟糕

我想将数据上下文注入到我的服务中,这样我的单元测试就可以在模拟数据上下文中工作。我以前用过nHibernate,但我不能用EF4解决这个问题,我也不能在网上找到一个可靠的例子


有人能给我指出一个有效的解决方案和例子吗?多谢

推荐的方法是使用内存中的数据库来测试SQLite,类似于中描述的测试NHibernate的技术


您还可以查看创建假DbContext的说明。

推荐的方法是使用内存中的数据库来测试SQLite,类似于中所述的测试NHibernate的技术


您还可以查看关于创建假DbContext的描述。

在我的公司,我们使用带有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();
        }
    }
}

我希望这能对您有所帮助。

在我的公司,我们正在使用带有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();
        }
    }
}

我希望这能对您有所帮助。

这可能是我找到的最好的示例,但它跳过了如何集成实际涉及数据库的代码,而只是讨论了如何模拟一切:我希望找到一个涉及数据库的EF4项目的工作示例,然后如何为DI修改它,模拟/测试,该示例使用EF上的存储库模式,这将允许您模拟存储库实现。但是,不将存储库与ORM一起使用有很好的理由。看见另外,有关集成测试使用的讨论,请参阅。其中一个论点是,如果您使用存储库并模拟实现,那么您不是在测试实体框架,并且您的LINQ查询可能会在生产中失败,因此与内存中数据库的集成测试实际上是在测试EF。这可能是我找到的最好的示例,但它忽略了如何集成实际涉及数据库的代码,而只是讨论了如何模拟一切:我希望找到一个涉及数据库的EF4项目的工作示例,然后如何修改它以进行DI、模拟/测试等。该示例使用EF上的存储库模式,这将允许您模拟存储库实现。但是,不将存储库与ORM一起使用有很好的理由。看见另外,有关集成测试使用的讨论,请参阅。其中一个论点是,如果您使用存储库并模拟实现,那么您不是在测试实体框架,并且您的LINQ查询可能会在生产中失败,因此与内存中数据库的集成测试实际上是在测试EF。