代码之家  ›  专栏  ›  技术社区  ›  Robert Green MBA

模拟UnitOfWork/GenericRepository实现

  •  0
  • Robert Green MBA  · 技术社区  · 2 年前

    我跟着 this SO answer 对于类似的问题,(以下是第二个答案的实施)

    我想知道如何测试:

     public async Task<string> DoWork()
            {
                return await _testRepository.GetAsync(); <-- how do I test here???
            }
    

    示例类

    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();
            }
    
        }
    }
    

    回购链接示例:

    Class Link

    Repo Link

    1 回复  |  直到 2 年前
        1
  •  0
  •   Gabriel Ferreira    2 年前

    视情况而定。你想测试什么?如果您需要模拟您的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返回模拟回购。