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

时间:2019-02-18 07:35:14

标签: c# unit-testing testing assert xunit

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

在编写单元测试时,遇到了以下问题。

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

  1. ToCreate
  2. ToGet

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

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

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

1 个答案:

答案 0 :(得分:4)

您不应使用ToCreateToGet通过创建ToGet来验证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*/
}

如果要使用模拟框架而不是在内存DB中使用,则可以模拟DbContext并验证交互。