在构造函数中采用 unitOfWork 的模拟服务
Mock service that takes unitOfWork in constructor
我尝试为我的业务逻辑编写单元测试。
我现在拥有的:
private Mock<IRepository<Theme>> _mockRepository;
private IBaseService<Theme> _service;
private Mock<IAdminDataContext> _mockDataContext;
private List<Theme> _listTheme;
[TestInitialize]
public void Initialize()
{
_mockRepository = new Mock<IRepository<Theme>>();
_mockDataContext = new Mock<IAdminDataContext>();
_service = new ThemeService(_mockDataContext.Object);
_listTheme = new List<Theme>
{
new Theme
{
Id = 1,
BgColor = "red",
BgImage = "/images/bg1.png",
PrimaryColor = "white"
},
new Theme
{
Id = 2,
BgColor = "green",
BgImage = "/images/bg2.png",
PrimaryColor = "white"
},
new Theme
{
Id = 3,
BgColor = "blue",
BgImage = "/images/bg3.png",
PrimaryColor = "white"
}
};
}
[TestMethod]
public async Task ThemeGetAll()
{
//Arrange
_mockRepository.Setup(x => x.GetAll()).ReturnsAsync(_listTheme);
//Act
List<Theme> results = await _service.GetAll();
//Assert
Assert.IsNotNull(results);
Assert.AreEqual(_listTheme.Count, results.Count);
}
问题 - 在服务中 GetAll
我收到异常,因为对象为空。对象 - 这是存储库。以下是代码详情:
public class BaseService<T> : DomainBaseService, IBaseService<T> where T : BaseEntity
{
private readonly IAdminDataContext _dataContext;
private readonly IRepository<T> _repository;
public BaseService(IAdminDataContext dataContext)
: base(dataContext)
{
this._dataContext = dataContext;
this._repository = dataContext.Repository<T>();
}
public async Task<List<T>> GetAll()
{
return await _repository.GetAll();
}
}
如您所见,在服务中我尝试从 unitOfWork (AdminDataContext
) 获取存储库。但它始终为空。
我应该如何模拟我的服务来测试它的功能?
您从未将 Repository
方法设置到 return 您的模拟存储库。只需将以下内容添加到测试的 "arrange" 部分:
_mockDataContext.Setup(x => x.Repository<Theme>()).Returns(_mockRepository.Object);
我尝试为我的业务逻辑编写单元测试。
我现在拥有的:
private Mock<IRepository<Theme>> _mockRepository;
private IBaseService<Theme> _service;
private Mock<IAdminDataContext> _mockDataContext;
private List<Theme> _listTheme;
[TestInitialize]
public void Initialize()
{
_mockRepository = new Mock<IRepository<Theme>>();
_mockDataContext = new Mock<IAdminDataContext>();
_service = new ThemeService(_mockDataContext.Object);
_listTheme = new List<Theme>
{
new Theme
{
Id = 1,
BgColor = "red",
BgImage = "/images/bg1.png",
PrimaryColor = "white"
},
new Theme
{
Id = 2,
BgColor = "green",
BgImage = "/images/bg2.png",
PrimaryColor = "white"
},
new Theme
{
Id = 3,
BgColor = "blue",
BgImage = "/images/bg3.png",
PrimaryColor = "white"
}
};
}
[TestMethod]
public async Task ThemeGetAll()
{
//Arrange
_mockRepository.Setup(x => x.GetAll()).ReturnsAsync(_listTheme);
//Act
List<Theme> results = await _service.GetAll();
//Assert
Assert.IsNotNull(results);
Assert.AreEqual(_listTheme.Count, results.Count);
}
问题 - 在服务中 GetAll
我收到异常,因为对象为空。对象 - 这是存储库。以下是代码详情:
public class BaseService<T> : DomainBaseService, IBaseService<T> where T : BaseEntity
{
private readonly IAdminDataContext _dataContext;
private readonly IRepository<T> _repository;
public BaseService(IAdminDataContext dataContext)
: base(dataContext)
{
this._dataContext = dataContext;
this._repository = dataContext.Repository<T>();
}
public async Task<List<T>> GetAll()
{
return await _repository.GetAll();
}
}
如您所见,在服务中我尝试从 unitOfWork (AdminDataContext
) 获取存储库。但它始终为空。
我应该如何模拟我的服务来测试它的功能?
您从未将 Repository
方法设置到 return 您的模拟存储库。只需将以下内容添加到测试的 "arrange" 部分:
_mockDataContext.Setup(x => x.Repository<Theme>()).Returns(_mockRepository.Object);