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.