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

问题描述 投票:1回答:1

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

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

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

  1. ToCreate
  2. ToGet

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

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

提到以下内容来创建一个单元测试:https://www.youtube.com/watch?v=ddrR440JtiA

c# unit-testing testing assert xunit
1个回答
4
投票

您不应通过ToCreate创建数据来验证ToGet是否使用ToGetToCreate来保存数据。原因是您的UT不是孤立的,并且您没有验证一种行为。你的UT也可以在不应该的情况下通过。

你应该做什么:为每个方法创建测试用例,然后为每个测试用例创建一个UT,如果与DB上下文有交互,则验证交互以正确的方式发生。

例如,成功持久保存一个对象:

[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并验证交互。

© www.soinside.com 2019 - 2024. All rights reserved.