单元测试的数据准备 - C#
Data preparation for Unit test - C#
我正在使用 Entity Framework Core InMemory Provider 编写单元 test/Component 测试。
我在写单元测试的时候遇到了下面的问题
我有以下两种BL/DL方法。
ToCreate
ToGet
所以当我编写单元测试时,我需要为单元测试创建一些示例数据。
当我为 ToGet
方法编写单元测试时,我可以使用 ToCreate
(BL 方法)创建示例数据或者当我为 ToCreate
编写单元测试时,可以我使用 ToGet
方法来检查创建的数据?这是一个正确的选择吗?
参考以下内容创建单元测试:
https://www.youtube.com/watch?v=ddrR440JtiA
您不应该通过使用 ToGet
或 ToGet
通过 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
并验证交互。
我正在使用 Entity Framework Core InMemory Provider 编写单元 test/Component 测试。
我在写单元测试的时候遇到了下面的问题
我有以下两种BL/DL方法。
ToCreate
ToGet
所以当我编写单元测试时,我需要为单元测试创建一些示例数据。
当我为 ToGet
方法编写单元测试时,我可以使用 ToCreate
(BL 方法)创建示例数据或者当我为 ToCreate
编写单元测试时,可以我使用 ToGet
方法来检查创建的数据?这是一个正确的选择吗?
参考以下内容创建单元测试: https://www.youtube.com/watch?v=ddrR440JtiA
您不应该通过使用 ToGet
或 ToGet
通过 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
并验证交互。