Reputation: 2862
I'm working on a .Net 8 API and I'm currently creating tests, and my concern is about mocking the connection to the MySql database.
We use CQRS (Mediator pattern) and in the queries handler (what I have to test) a IMySqlConnectionFactory is injected.
This IMySqlConnectionFactory has three methods, one to create the connection, another to do a query with filter, and a third to execute a MySql statement.
IMySqlConnectionFactory:
public interface IMySqlConnectionFactory
{
DbConnection CreateConnection(Region region);
Task<(int Count, TOut[] Data)> QuerySearchAsync<TDbItem, TOut>(IRegionRepository regionRepository, string fetchDataQuery, string? countDataQuery = null, Dictionary<string, string>? columnModelModel = null, Paging? paging = null, ColumnName[]? order = null, string[]? excludedOrder = null, Func<Region, TDbItem, TOut>? transform = null, object? queryParam = null, Func<Region, bool>? filter = null, bool skipDbPaging = false, CancellationToken ct = default(CancellationToken)) where TOut : class;
Task<int> ExecuteAsync(IRegionRepository regionRepository, string sql, object? @params = null, Func<Region, bool>? filter = null, CancellationToken ct = default(CancellationToken));
}
And that Interface is being registered in
Program.cs:
await RunServer.RunAsync<Startup>(
args,
(builder, options) =>
{
options.OtherServices = () =>
{
...
builder.Services.AddScoped<IMySqlConnectionFactory, MySqlCloudStackCoreConnectionFactory>();
};
}
);
My issue is I don't know how to override that service registration so when I'm testing it registers a different implementation (we use XUnit for the tests), and also how should I mock the MySQL connection so it connects to a fake database with data I will mock myself..
We are already doing this with SQL Server and it's working great, but it's quite a complex implementation one of my companions developed and I don't know how to replicate in MySQL.
In resume I need to register a different implementation for a DbConnectionFactory where in the end the query and execute methods would be intact, but I would only define a mock MySQL connection.
I have to stick to the IMySqlConnectionFactory interface, because all our cqrs handlers use that for the queries. What can I try next?
Upvotes: 0
Views: 136