如何使用unitOfWork和存储库模拟数据库访问(.NET Core 6)

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

PUT
路由中,我有一个实用方法,我们可以在其中放置业务逻辑(因此,当我们需要完成路由所做的工作时,我们可以调用该方法而不是路由)。

我不明白如何伪造数据连接。

在路线上,我打电话

using (var unitOfWork = new UnitOfWork(IP, DbName, UserId, IdAzienda))
{
    GroupEvents ret = UtilityOffPrenotazioni.UpdatePrenotazione(event, unitOfWork, group, eventId, userId, mapper, UserId, agencyId);
}

在函数内部我做了一些验证和其他事情,包括一些数据库操作,例如

Tblageeventi ev = new Tblageeventi();
ev = unitOfWork.TblageeventiRepo.Read(eventId, userId)
...
...
ev = unitOfWork.TblageeventiRepo.Update(ev);
eventRet = mapper.Map<Tblageeventi, EventiGruppo>(ev);

unitOfWork.TblageeventiRepo.Delete(new Tblageeventi()
{
    UserId = userId,
    EventId = eventId
});

在测试方法中,我有这样的东西

var retEvent = A.Fake<Tblageeventi_extended>();
var ev = A.Fake<Tblageeventi>();
using (var unitOfWork = A.Fake<UnitOfWork>((x => x.WithArgumentsForConstructor(() => new UnitOfWork(_ip, _dbName, _userId, _agencyId, "", 5432)))))
{            
    A.CallTo(() => unitOfWork.TblageeventiRepo.Read(eventId, userId)).Returns(retEvent);
    A.CallTo(() => unitOfWork.TblageeventiRepo.Update(ageeventi, "")).Returns(ev);

    // Act
 
    UtilityOffPrenotazioni.UpdatePrenotazione(groupEvents, unitOfWork, groups, eventId, idUtente, _mapper, _userId, _agencyId);
}

错误提示

SxMultitenantDAL.Repos.TblageeventiRepository 类型的对象“SxMultitenantDAL.Repos.TblageeventiRepository”不被识别为假对象

我没有找到伪造的方法

TblageeventiRepo
(它的类型是
TblageeventiRepository
)。

有关更多信息,请阅读

TblageeventiRepository
类中的签名 ->

public Tblageeventi_extended Read(int eventId, int userId).

有办法嘲笑这个吗?我现在开始研究测试主题,所以我不知道我写(组织)的方式是否正确。

谢谢你

c# asp.net-core testing mocking fakeiteasy
1个回答
0
投票

你的错误表明你需要首先模拟 UnitOfWork 的属性

unitOfWork.TblageeventiRepo

返回存储库的假实现,然后才从存储库模拟方法

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