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