Модульное тестирование метода, который включает несколько запросов - PullRequest
1 голос
/ 05 августа 2020

У меня есть метод, который взаимодействует с базой данных, где я выполняю запросы 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"));
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...