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