单元测试的数据准备 - C#

Data preparation for Unit test - C#

我正在使用 Entity Framework Core InMemory Provider 编写单元 test/Component 测试。

我在写单元测试的时候遇到了下面的问题

我有以下两种BL/DL方法。

  1. ToCreate
  2. ToGet

所以当我编写单元测试时,我需要为单元测试创​​建一些示例数据。

当我为 ToGet 方法编写单元测试时,我可以使用 ToCreate(BL 方法)创建示例数据或者当我为 ToCreate 编写单元测试时,可以我使用 ToGet 方法来检查创建的数据?这是一个正确的选择吗?

参考以下内容创建单元测试: https://www.youtube.com/watch?v=ddrR440JtiA

您不应该通过使用 ToGetToGet 通过 ToCreate 创建数据来验证 ToCreate 持久化数据。 原因是你的 UT 不是孤立的,你不是在验证一种行为。 您的 UT 也可以在不应该通过的情况下通过。

你应该做什么: 为每个方法创建测试用例,然后为每个测试用例创建一个 UT,如果存在与数据库上下文的交互,请验证交互是否以正确的方式发生。

例如成功持久化一个对象:

[Fact]
public void ToCreate_Persist_One_Oblect(){
   //arrange:
   var sut = new Repository(context);

   //act
   sut.ToCreate(new XYzClass(){
       ... some properties
   });

   //assert:
   var newlyCreatedXyz = context.XYZ.FirstOfDefualt(/*get the item*/);
   Assert.NotNull(newlyCreatedXyz);
   /*Then asset the properties*/
}

如果您打算使用模拟框架而不是内存数据库,那么您可以模拟 DbContext 并验证交互。