我正在使用Entity Framework Core InMemory Provider编写单元测试/组件测试。
当我编写单元测试时,我遇到了以下问题。
我有以下两种BL / DL方法。
ToCreate
ToGet
因此,当我编写单元测试时,我需要为单元测试创建一些示例数据。
当我为ToGet
方法编写单元测试时,我可以使用ToCreate
(BL方法)创建样本数据吗?当我为ToCreate
编写单元测试时,我可以使用ToGet
方法检查创建的数据吗?这是一个正确的选择吗?
提到以下内容来创建一个单元测试:https://www.youtube.com/watch?v=ddrR440JtiA
您不应通过ToCreate
创建数据来验证ToGet
是否使用ToGet
或ToCreate
来保存数据。原因是您的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
并验证交互。