模拟 UnitOfWork / GenericRepository 实现
Mocking UnitOfWork / GenericRepository Implementation
我关注了this SO answer一个类似的问题,(下面是第二个答案的实现)
我正在想办法测试:
public async Task<string> DoWork()
{
return await _testRepository.GetAsync(); <-- how do I test here???
}
例子Class
using System.Threading.Tasks;
using Test.DataAccess.Core;
using Test.DataAccess.Repository;
namespace Test.DataAccess
{
public class TestManager : ITestManager
{
private IUnitOfWork _unitOfWork;
private ITestRepository _testRepository;
public TestManager(IUnitOfWork unitOfWork)
{
_unitOfWork = unitOfWork;
_testRepository = _unitOfWork.GetRepository<TestRepository>();
}
public async Task<string> DoWork()
{
return await _testRepository.GetAsync();
}
}
}
示例回购 Link:
视情况而定。你想测试什么?如果您需要模拟由 IUnitOfWork 构建的 ITestRepository,您可以使用 NSubstitute 执行以下操作:
public class SomeTestClass
{
public void SomeTest()
{
var repository = Substitute.For<ITestRepository>();
var unitOfWork = Substitute.For<IUnitOfWork>();
unitOfWork.GetRepository<TestRepository>().Returns(repository);
}
}
在那种情况下,您将同时模拟存储库和 uow,并使 uow return 成为模拟存储库。
我关注了this SO answer一个类似的问题,(下面是第二个答案的实现)
我正在想办法测试:
public async Task<string> DoWork()
{
return await _testRepository.GetAsync(); <-- how do I test here???
}
例子Class
using System.Threading.Tasks;
using Test.DataAccess.Core;
using Test.DataAccess.Repository;
namespace Test.DataAccess
{
public class TestManager : ITestManager
{
private IUnitOfWork _unitOfWork;
private ITestRepository _testRepository;
public TestManager(IUnitOfWork unitOfWork)
{
_unitOfWork = unitOfWork;
_testRepository = _unitOfWork.GetRepository<TestRepository>();
}
public async Task<string> DoWork()
{
return await _testRepository.GetAsync();
}
}
}
示例回购 Link:
视情况而定。你想测试什么?如果您需要模拟由 IUnitOfWork 构建的 ITestRepository,您可以使用 NSubstitute 执行以下操作:
public class SomeTestClass
{
public void SomeTest()
{
var repository = Substitute.For<ITestRepository>();
var unitOfWork = Substitute.For<IUnitOfWork>();
unitOfWork.GetRepository<TestRepository>().Returns(repository);
}
}
在那种情况下,您将同时模拟存储库和 uow,并使 uow return 成为模拟存储库。