コード例 #1
0
        public async Task Should_Tracked_Divide_When_Invoke()
        {
            var spyList = new List <Operation>();
            var stubDb  = new Mock <IRepository <Operation> >();

            stubDb.Setup(x => x.Add(It.IsAny <Operation>())).Callback <Operation>(o => spyList.Add(o)).Returns(Task.CompletedTask);
            stubDb.Setup(x => x.Query).Returns(spyList.AsQueryable());

            var timeProviderFake = new Mock <ITimeProvider>();

            timeProviderFake.Setup(x => x.GetNow()).Returns(DateTime.Now);
            var divService = new DivService();
            var divParams  = new DivParams()
            {
                Dividend = 10, Divisor = 2
            };
            var trakedId = 1;

            var sut    = new ServiceTracked <DivParams, DivResult>(divService, trakedId, timeProviderFake.Object, stubDb.Object);
            var result = await sut.Execute(divParams);

            stubDb.Verify(x => x.Add(It.IsAny <Operation>()), Times.Once);
            Assert.Single(spyList);
            Assert.Equal(spyList[0].TrackId, trakedId);
            Assert.Equal(spyList[0].Calculation, divService.GetDescription(divParams, result));
            Assert.Equal(spyList[0].OperationType, divService.GetServiceName());
        }
コード例 #2
0
        private IOperationServiceBase Get <P, R>(IServiceProvider provider, bool toTrack, int trackId) where P : ParamsOperationBase where R : ResultOperationBase
        {
            var op = provider.GetRequiredService <IOperationService <P, R> >();

            if (toTrack)
            {
                var repo = provider.GetRequiredService <IRepository <Operation> >();
                var time = provider.GetRequiredService <ITimeProvider>();
                op = new ServiceTracked <P, R>(op, trackId, time, repo);
            }

            return(op);
        }