C# 集成测试-数据库中的设置数据

C# 集成测试-数据库中的设置数据,c#,entity-framework-6,integration-testing,C#,Entity Framework 6,Integration Testing,我需要为公开服务方法的层编写集成测试。但是我需要我的数据库处于某种状态才能通过测试 例如,为了测试GetStoreByID方法,我需要在数据库中存储1,而不是存储2(对于ko测试) 数据库由另一个团队使用sql项目(dacpac)开发和部署 我使用实体框架6.1.3和Edmx 在这种情况下,在测试之前在数据库中设置数据的最佳方法是什么?如果您的数据访问由一个接口分隔(即,对每种类型使用类似IDBSet的内容),我个人会尽可能避免完全依赖数据库,而使用a(如果您需要测试存储库/DAL代码)或者只是

我需要为公开服务方法的层编写集成测试。但是我需要我的数据库处于某种状态才能通过测试

例如,为了测试GetStoreByID方法,我需要在数据库中存储1,而不是存储2(对于ko测试)

数据库由另一个团队使用sql项目(dacpac)开发和部署

我使用实体框架6.1.3和Edmx


在这种情况下,在测试之前在数据库中设置数据的最佳方法是什么?

如果您的数据访问由一个接口分隔(即,对每种类型使用类似IDBSet的内容),我个人会尽可能避免完全依赖数据库,而使用a(如果您需要测试存储库/DAL代码)或者只是用moq来嘲弄,或者如果你不这么做的话

我知道这并没有明确回答您的问题,但根据我的经验,设置测试数据的最佳方法是在内存中进行,并尽可能少地使用外部依赖项。数据库添加了额外的移动部件,这些部件在单元/集成测试中并不需要依赖。如果您有CI服务器等,这也会增加复杂性。。。您通常希望避免的问题。

此链接提供Microsoft MSDN文章,介绍如何通过伪造数据库来使用EF6编写测试


总之,本文讨论的主题是“在为应用程序编写测试时,通常希望避免访问数据库。实体框架允许您通过创建上下文(行为由您的测试定义)来实现这一点,该上下文使用内存中的数据。

与您的问题有些无关,但让两个团队集成到一个数据库上通常被认为是“不好的主意”,因为这通常意味着两个团队在“锁定步骤”中工作,即,部署到数据库通常需要其他团队同时部署。解决方案是引入某种API边界,允许您在保持向后兼容性的同时进行数据库更改。您好!我已经在单元测试中使用了Rhino.mock。我认为在集成测试期间“模拟”依赖项是不可取的。是否可以使用EF 6的存储器?如何预先配置数据?感谢嗨@Azerty123实际上我非常喜欢testdouble方法,你可以亲自模拟整个上下文。所以基本上你的EFDB集合是列表。它确实依赖于您拥有一个实现接口的dbcontext,然后使用类似的东西作为伪db集。