使用Moq的unit testing工作单元和通用存储库模式框架

我正在使用Moq对使用工作单元和通用存储库的服务进行unit testing。 问题是在服务类中,当我在调试模式下运行测试时,_subsiteRepository始终为null。

我正在嘲笑服务类的设置

private readonly IRepository _subsiteRepository; public PlatformService(IUnitOfWork unitOfWork) { _subsiteRepository = unitOfWork.GetRepository(); } 

以及正在测试的这个类中的方法。 问题是_subsiteRepository始终为null。 该方法不仅仅是这个,但这是相关的部分。

 public async Task<IEnumerable> GetSubsites() { // Get Subsites var subsites = await _subsiteRepository .GetAll() .ToListAsync(); } 

最后这是我正在运行的测试:

 private readonly Mock<IRepository> _subsiteRepository; private readonly Mock<IUnitOfWork> _unitOfWork; private readonly PlatformService _platformService; _subsiteRepository = new Mock<IRepository>(); _unitOfWork = new Mock<IUnitOfWork>(); _platformService = new PlatformService(_unitOfWork.Object); // Arrange var fakeSubsites = new List { new Subsite {IDSubsite = new Guid(), Title = "Subsite One"} }.AsQueryable(); _unitOfWork.Setup(x => x.GetRepository()).Returns(_subsiteRepository.Object); _unitOfWork.Setup(x => x.GetRepository().GetAll()).Returns(fakeSubsites); // Act var subsites = await _platformService.GetSubsites(null, null); // Assert Assert.NotNull(subsites); 

在“排列”步骤后移动_platformService创建。 因为在设置unitOfWork mock之前调用PlatformService构造函数。

 _subsiteRepository = new Mock>(); _unitOfWork = new Mock>(); // Arrange var fakeSubsites = new List { new Subsite {IDSubsite = new Guid(), Title = "Subsite One"} }.AsQueryable(); _unitOfWork.Setup(x => x.GetRepository()).Returns(_subsiteRepository.Object); _unitOfWork.Setup(x => x.GetRepository().GetAll()).Returns(fakeSubsites); // Act _platformService = new PlatformService(_unitOfWork.Object); var subsites = await _platformService.GetSubsites(null, null); // Assert Assert.NotNull(subsites);