0
我有一個使用2個倉庫的服務,我想進行單元測試。所以爲了測試,我需要讓構造函數直接使用接口而不是存儲庫類,這樣我就可以模擬存儲庫。但是,我不能將它們的DbContext設置爲相同的,這會導致其他問題。如何構建需要多個存儲庫的服務?
下面的代碼:
public class RolePrivilegeService : IRolePrivilegeService
{
private readonly RoleReadWriteRepository _roleRepo;
private readonly PrivilegeReadRepository _privilegeRead;
public RolePrivilegeService(RoleReadWriteRepository roleWrite,
PrivilegeReadRepository privilegeRead)
{
_roleRepo = roleWrite;
_privilegeRead = privilegeRead;
_roleRepo.Db = _privilegeRead.Db;
}
public async Task<int> AssignPrivilege(string roleId, string privilegeId, string companyId)
{
var role = await _roleRepo.FindRole(companyId, roleId);
if(role == null) throw new RoleNotFoundException();
var privilege = await _privilegeRead.Find(privilegeId);
if(privilege == null) throw new PrivilegeNotFoundException();
role.AssignPrivilege(privilege);
return await _roleRepo.UpdateRole(role);
}
}
的接口和實體是在一個項目中,服務和存儲庫是另一個項目。
通過抽象出實現問題,以便可以嘲笑它們。類應該取決於抽象而不是結核。 – Nkosi
我不明白爲什麼注入存儲庫接口可能禁止模擬DbContext。我猜你的倉庫也使用構造函數注入。如果是這樣,肯定沒有理由反對嘲諷實體框架DbContext - 只需在創建存儲庫之前創建適當的實例即可。 –