Reputation: 210
I'm trying to create unit tests for the next method:
public async Task<Entity> GetEntityByIdAsync(Guid id)
{
List<ScanCondition> scanConditions = new List<ScanCondition>();
scanConditions.Add(new ScanCondition("Date", ScanOperator.Between, GetDayRange(submitDate).Item1, GetDayRange(submitDate).Item2));
scanConditions.Add(new ScanCondition("FieldId", ScanOperator.Equal, id));
List<Entity> data = await _dynamoDbContext.ScanAsync<Entity>(scanConditions).GetRemainingAsync().ConfigureAwait(false);
return data.OrderByDescending(r => r.SubmitDate).FirstOrDefault();
}
I created Mock for IDynamoDBContext, but I have problems with the setup of the ScanAsync method.
Had anybody any ideas?
Thanks!
Upvotes: 1
Views: 790
Reputation: 3807
You can't create an instance of AsyncSearch because there's no available constructor but you can mock the object itself.
var mockContext = new Mock<IDynamoDBContext>();
var mockData = new List<YourModel> { /* populate your fields */ };
var mockAsyncSearch = new Mock<AsyncSearch<YourModel>>();
mockAsyncSearch.Setup(search => search.GetRemainingAsync(It.IsAny<CancellationToken>()))
.ReturnsAsync(mockData);
mockContext.Setup(context => context.ScanAsync<YourModel>(It.IsAny<List<ScanCondition>>(), It.IsAny<DynamoDBOperationConfig>()))
.Returns(mockAsyncSearch.Object);
var result = await _sut.GetEntityByIdAsync(Guid.NewGuid());
Upvotes: 0