GetDbSetByQuery().dbSet unit test mock issue

37 Views Asked by At

I am trying to write unit tests using autofixture, nsubstitude and fluent assertions and except this situation it went pretty well. Following method is my main method:

      public async Task<ServiceResponse<List<NonStockedPartTrgZoneDto>>> Get()
        {
            var responseList = await repository.GetDbSetByQuery().dbSet
                .Include(x => x.Part)
                .Include(x => x.Plant)
                .Select(x => new NonStockedPartTrgZoneDto()
                {
                    Id = x.Id,
                    RfPart = x.RfPart,
                    RfPlant = x.RfPlant,
                    CdPart = x.Part.CdPart,
                    CdPlant = x.Plant.CdPlant,
                    SwActive = x.SwActive,
                    NoZone = x.NoZone,
                    InsertedDate = x.InsertedDate,
                    InsertedUser = x.InsertedUser,
                    UpdatedUser = (x.UpdatedUser == null) ? x.InsertedUser : x.UpdatedUser,
                    UpdatedDate = (x.UpdatedDate == null) ? x.InsertedDate : x.UpdatedDate
                }).ToListAsync().ConfigureAwait(false);

            return serviceResponseHelper.SetSuccess(responseList);
        }

And this is my unit test.

        [Fact]
        [Trait("Operation", "Get")]
        [Trait("Category", "NonStockedPartTrgZone")]
        public async Task NonStockedPartTrgZoneService_Get_ReturnsNonStockedPartTrgZoneDto()
        {
            // Arrange
            var fixture = new Fixture();
            var nonStockedPartTrgZoneDto = fixture.Create<NonStockedPartTrgZoneDto>();
            var nonStockedPartTrgZoneList = fixture.CreateMany<Domain.Definition.NonStockedPartTrgZone>().ToList();
            var expectedDtoList = _mapper.Map<List<NonStockedPartTrgZoneDto>>(nonStockedPartTrgZoneList);

            _repository.GetListAsync(Arg.Any<Expression<Func<Domain.Definition.NonStockedPartTrgZone, bool>>>())
                .Returns(nonStockedPartTrgZoneList);
            _mapper.Map<List<NonStockedPartTrgZoneDto>>(nonStockedPartTrgZoneList)
                .Returns(expectedDtoList);

            // Act
            var result = await _nonStockedPartTrgZoneService.Get();

            // Assert
            result.Should().NotBeNull();
            result.IsSuccessful.Should().BeTrue();
            result.Result.Should().BeEquivalentTo(expectedDtoList);
        }

But i am getting following error from var result = await _nonStockedPartTrgZoneService.Get() line:

 Bomp.Application.Tests.Definition.NonStockedPartTrgZone.NonStockedPartTrgZoneServiceTest.NonStockedPartTrgZoneService_Get_ReturnsNonStockedPartTrgZoneDto
   Source: NonStockedPartTrgZoneServiceTest.cs line 56
   Duration: 11 ms

  Message: 
System.ArgumentNullException : Value cannot be null. (Parameter 'source')

  Stack Trace: 
Check.NotNull[T](T value, String parameterName)
EntityFrameworkQueryableExtensions.Include[TEntity,TProperty](IQueryable`1 source, Expression`1 navigationPropertyPath)
NonStockedPartTrgZoneService.Get() line 52
NonStockedPartTrgZoneServiceTest.NonStockedPartTrgZoneService_Get_ReturnsNonStockedPartTrgZoneDto() line 70
--- End of stack trace from previous location ---

I guess i am doing something wrong GetDbSetByQuery().dbSet mocking. What goes wrong how can mock this method, any help would be invaluable.

0

There are 0 best solutions below