Hanna Holasava
Hanna Holasava

Reputation: 210

Mock IDynamoDBContext.ScanAsync method

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

Answers (1)

Z&#233; Carlos
Z&#233; Carlos

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

Related Questions