Mocking Dynamic QueryAsync

199 views Asked by At

Below is my code to mock my connection unit test:

        var connection = new Mock<IDatabaseConnectionFactory>();
        var conn = new Mock<IDbConnection>();
        
        connection.Setup(c => c.GetConnection()).Returns(conn.Object);

        _productRepository = new ProductRepository(connection.Object, _httpContextAccessorMock.Object);

        var listDyn = new List<dynamic>();
        listDyn.Add(1);
        conn.SetupDapperAsync(c => c.QueryAsync(It.IsAny<string>(), It.IsAny<object>(),
                It.IsAny<IDbTransaction>(), It.IsAny<int>(), It.IsAny<CommandType>()))
            .ReturnsAsync(listDyn.AsEnumerable());

        var model = new Model()
        { name = "test", owner = "owner "};
        var result = _productRepository.AddProduct(model);

But when I call the AddProduct(model)

I get an errot within the part that I mocked.

await connection.QueryAsync("[dbo].[storedProcName]",
              param: parameters, commandType: CommandType.StoredProcedure).ConfigureAwait(false)

The error says:

 Message: "Object reference not set to an instance of an object."
 Source: "Dapper"

StackTrace error: "Object reference not set to an instance of an object. at Dapper.DynamicParameters.AddParameters(IDbCommand command, Identity identity)\r\n at Dapper.DynamicParameters.Dapper.SqlMapper.IDynamicParameters.AddParameters(IDbCommand command, Identity identity)\r\n at Dapper.SqlMapper.<>c__DisplayClass165_0.b__0(IDbCommand cmd, Object obj)\r\n at Dapper.CommandDefinition.SetupCommand(IDbConnection cnn, Action2 paramReader)\r\n at Dapper.SqlMapper.<QueryAsync>d__331.MoveNext()\r\n at Repository.Repositories.VendorRepository.d__13.MoveNext() in C:\Users\xxxxx\Documents\xxx\Projects\xxxApi\Infrastructure\Repository\Repositories\ProductRepository.cs:line 168"

Is there anything that I missed?

0

There are 0 answers