在单元测试期间避免在EF Core 2.2中使用HasData Seed DbContext
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在单元测试期间避免在EF Core 2.2中使用HasData Seed DbContext相关的知识,希望对你有一定的参考价值。
在我的ASP.Net CORE 2.2 / EF Core 2.2 Web API应用程序中,我的DbContext中有一个HasData()方法,可以为DB提供一些我使用的标准数据。但是,我不想在运行xUnit测试时使用该数据。
我的单元测试使用Sqlite内存提供程序,作为该过程的一部分,它需要调用EnsureCreated()。好吧,EnsureCreated()调用调用HasData()的OnModelCreating(),所以我的单元测试上下文现在包含了我不想要的所有HasData种子数据。我想用不同的,非常具体的数据来进行单元测试。
因为EnsureCreated()为上下文播种,然后我尝试添加我的单元测试特定的种子数据,我最终在我的测试DbContext中使用了两组数据并且我的测试失败了。
如何绕过HasData调用进行单元测试?
你总是可以用Mock
模拟调用它会提供一种模拟接口的方法,这样所以模拟接口的函数调用实际上会调用你的模拟函数。这将为您提供一种覆盖HasData
函数调用的方法。
当然,这意味着如果它尚未使用该功能的接口,则必须将其包装在一个中。
以下是Mocking的一些有用示例:writing unit tests with NUnit and Moq和an introduction to unit testing with mocks(using moq)。
我还怀疑Theory属性和内联数据对您有用。 Creating parameterized tests in xUnit
希望有所帮助。
以上是关于在单元测试期间避免在EF Core 2.2中使用HasData Seed DbContext的主要内容,如果未能解决你的问题,请参考以下文章
如何在单元测试期间覆盖 IQueryable 的 Contains 方法?
有没有办法在 .NET Core 的单元测试中查看生成的日志消息?