У меня есть метод, который взаимодействует с базой данных, где я выполняю запросы SELECT, INSERT, UPDATE и c. Метод принимает в качестве параметра объект типа Scoreboard. Теперь я хочу протестировать этот метод. Я провел исследование, прежде чем опубликовать вопрос, и я понял, что мне нужно. Единственное, чего я не понял, так это как настроить запросы в моем фиктивном объекте. Например, метод, который я хочу протестировать, выглядит так:
public async Task<List<Scoreboard>> UpdateScoreBoardAsync(Scoreboard scoreboardModel)
{
try
{
using (IDbConnection connection = _dbConnectionFactory.CreateConnection(_connectionString))
{
var playerNames = connection.QuerySingleOrDefault<Players>(
@"SELECT * FROM players WHERE username = @player", new {player = scoreboardModel.UserName});
if (playerNames != null)
{
connection.Open();
var sqlStatementGame =
@"INSERT INTO game (attempts, totalTime, playedTime, playersId) VALUES (@attempts, @TotalTime, @PlayedTime, @playersId); select LAST_INSERT_ID();";
gameId = await connection.ExecuteScalarAsync<int>(sqlStatementGame, new
{
scoreboardModel.Attempts,
..
}); ..more queries..
Теперь метод тестирования выглядит так:
public async Task UpdateScoreBoardTestAsync()
{
TimeSpan time = new TimeSpan(12, 20, 20); // hours, minutes, seconds
Scoreboard obj = new Scoreboard
{ Attempts = 5, TotalTime = 12, PlayedTime = _dateTimeNow + time, UserName = "xUnitTestUsername" };
Players players = new Players()
{
PlayersId = ..
UserName = ..
DateCreated = ..
LastLogin = ..
};
var connectionFactory = new Mock<IDbConnectionFactory>();
var connection = new Mock<IDbConnection>();
connectionFactory.Setup(x => x.CreateConnection(It.IsAny<string>())).Returns(connection.Object);
connection.Setup(c => c.QuerySingleOrDefault<Players>(It.IsAny<string>(), null, null, null, null)).Returns(players);
**Here is where im not sure how to setup all queries that i have in the method i want to call**
var sut = new DataService(connectionFactory.Object, "");
// Act
var response =await sut.UpdateScoreBoardAsync(obj);
//Act
Assert.Contains<Scoreboard>(response, x => x.UserName.Equals("xUnitTestUsername"));
Assert.DoesNotContain<Scoreboard>(response, x => x.UserName.Equals("xUnitTestUsername1"));
}