代码之家  ›  专栏  ›  技术社区  ›  Andrew Day

无法模拟unitOfWork并且没有服务接口

  •  1
  • Andrew Day  · 技术社区  · 7 年前

    namespace Foo.Bar.Services    
    {    
        public abstract class Service    
        {    
            public Service(IUnitOfWork unitOfWork)    
            {    
                this.UnitOfWork = unitOfWork;    
            }
            protected IUnitOfWork UnitOfWork { get; private set; }    
        }  
    }
    
    using...
    
    namespace Foo.Bar.Services    
    {    
        public class ControlService : Service    
        {    
            ...    
            private readonly IRepository<GroupStructure> groupStructures = null;
    
            public ControlService(IUnitOfWork uow) : base(uow)
            {    
               ...
               this.agencyGroupStructures = this.UnitOfWork.GetRepository<AgencyGroupStructure>();    
            }
    
            public Tuple<bool, int> HasExternalImage(int branchId)
            {
                var externalResultList = from a in this.Structures.Table
                                        where a.GroupID == branch.GroupID
                                            && (a.AreExternalRequired == true)
                                            && (a.ProductTypeID == ETourType.Trailer)
                                            && !a.Deleted
                                        select a;
                return (some logic based on above...)
            }    
    }
    

    和测试

    namespace ControlTests    
    {    
        [TestFixture]    
        public class Control    
        {    
            //unable to create service due to being abstact  
            [Test]    
            public void TestMethod1()    
            {    
                ******Changed here******
                var Mock = new Mock<GroupStructureService> { CallBase = true };    
                var fakeControl = new ControlService(Mock.Object)
    
                var sut = fakeControl.HasExternalImage(1249);
    
                Assert.That(sut.Item1, "true");    
            }    
        }    
    }
    

    Castle.DynamicProxy.InvalidProxyConstructorArgumentsException无效:可以 未实例化类的代理:餐饮服务.控制服务。

    我尝试了一些方法,但是我不能让这个以前未经测试的应用程序创建一个模拟对象来进行测试

    依赖性。但它的错误是不能从 …组结构到食品、酒吧、家具

    1 回复  |  直到 7 年前
        1
  •  2
  •   Nkosi    7 年前

    通常,被测系统不会被模拟。模拟它的依赖关系并将其注入到被测试类的实例中

    [TestFixture]    
    public class Control { 
    
        [Test]    
        public void TestMethod1() {
            //Arrange
            var repository = new Mock<IRepository<GroupStructure>>();
            //...Set up the repository behavior to satisfy logic
    
            var uow = new Mock<IUnitOfWork>();
            uow.Setup(_ => _.GetRepository<AgencyGroupStructure>())
                .Returns(repository.Object);
    
            var sut = new ControlService(uow.Object);
            var expected = true;
    
            //Act
            var actual = sut.HasExternalImage(1249);
    
            //Assert
            Assert.AreEqual(actual.Item1, expected);    
        }    
    }
    

    参考 Moq Quickstart 更好地理解如何使用mocking框架。