Unit testing 如何使用fake轻松设置测试中的自动增量Id

Unit testing 如何使用fake轻松设置测试中的自动增量Id,unit-testing,fakeiteasy,Unit Testing,Fakeiteasy,场景 我在PreviewService.AddPreview中有一个方法。我想测试它是否添加了新的预览。我使用C#和EntityFremework。如何编程测试以使用自动增量创建预览id?我知道我应该拥有存储库或DAO,但我没有重构它的权限:( 代码 private DbSet<WebsitePreview> _previewDbSet; private List<WebsitePreview> _previews; private IQueryable<Websi

场景

我在PreviewService.AddPreview中有一个方法。我想测试它是否添加了新的预览。我使用C#和EntityFremework。如何编程测试以使用自动增量创建预览id?我知道我应该拥有存储库或DAO,但我没有重构它的权限:(

代码

private DbSet<WebsitePreview> _previewDbSet;
private List<WebsitePreview> _previews;
private IQueryable<WebsitePreview> _previewsAsQueryable => this._previews.AsQueryable();  

很抱歉,zolty13,这里没有足够的帮助。我对EntityFramework不熟悉,问题中也没有足够的细节来帮助我找到解决方案。如果您能提供一个完整的、失败率最低的测试,我可能会提供帮助,但事实上,我不知道
AddNewPreview
有什么作用,也不知道您为什么要这样做希望它提供正确的ID。但是如果你填写详细信息,就有机会。或者(另外?),描述您尝试了什么。当您调试到测试中时,您看到了什么?您是否找到了现有的预览?如果没有,它找到了什么?在所有阶段,我都会验证您在调试会话中遇到的对象是否是您期望的对象(使用
ReferenceEquals
进行检查).嗨,根据id,我什么都没试过。我只是想知道当我将id添加到集合中时如何在实体中伪造id。嗨,根据id,我什么都没试过。我只是想知道当我将id添加到集合中时如何在实体中伪造id。我想模拟数据库的行为。
_previews = new List<WebsitePreview>();
_previewDbSet = A.Fake<DbSet<WebsitePreview>>(cat =>
    cat.Implements<IQueryable<WebsitePreview>>());
A.CallTo(() => ((IQueryable<WebsitePreview>)_previewDbSet).Provider)
    .Returns(_previewsAsQueryable.Provider);
A.CallTo(() => ((IQueryable<WebsitePreview>)_previewDbSet).GetEnumerator())
    .Returns(_previewsAsQueryable.GetEnumerator());
A.CallTo(() => ((IQueryable<WebsitePreview>)_previewDbSet).Expression)
   .Returns(_previewsAsQueryable.Expression);
A.CallTo(() => ((IQueryable<WebsitePreview>)_previewDbSet).ElementType)
   .Returns(this._previewsAsQueryable.ElementType);
A.CallTo(() => _dbContext.Set<WebsitePreview>()).Returns(_previewDbSet);
//arrange
string newPreviewName = "new";
WebsitePreview existingPreview = GetExistingPreview();     //it has id=1
this._previews.Add(existingPreview);
PreviewItemDto expectedPreviewItemDto = new PreviewItemDto
{
    Id = 2,
    Name = "new",
    Selected = false
};

//act
var result = this._sut.AddNewPreview(newPreviewName);
//assert
//(2, 0)
Assert.AreEqual(expectedPreviewItemDto.Id, result.Id); //result.Id equals 0, expected 2