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?