Как написать модульные тесты для функций, которые читают / пишут в базу данных MySQL? - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть простое приложение, которое читает и записывает результаты в базу данных MySQL, используя javascript и python / flask.Я хочу знать, как наилучшим образом изолировать различные блоки приложения для тестирования.

JavaScript:

  • Как бы я это высмеял итакже потребуются ли для него специальные тесты в наборе тестов только для JavaScript?

    $scope.create_score = function () {
                 console.log("logged");
                 var scoreData = new scoreObj($scope.match_ID,$scope.Home_Score, $scope.Away_Score);
                 if ($scope.Home_Score >= 0 && $scope.Away_Score >= 0) {
                 $http(
    
                     {
                         method: 'POST',
                         url: "/api/v1/scores",
                         data: scoreData
                     }
                 ).then(function successCallback(response) {
                         alert("Success");
                     }, function errorCallback(response) {
                         alert("Sorry, there was a problem!");
                     }
                 )
                     } else {
                     alert("Sorry, score can not be negative!");
                 }
             };
    

Python:

  • Это основные функции, которые мне нужно проверить.

    def execute_query_json(cursor, qry, cnx):
        print("Executing JSON query...")
        cursor.execute(qry, (request.json['Match_ID'],
                     request.json['Home_Score'],
                     request.json['Away_Score'],)
            )
        cnx.commit()
    
    def add_score():
        cnx = conn_db()
        cursor = cnx.cursor()
        print("Updating score")
        execute_query_json(cursor, "INSERT INTO scores (Match_ID, Home_Score, Away_Score) VALUES (%s,%s,%s)", cnx)
        return "ok"
    

Тесты:

  • Как бы я консолидировалразличные методы насмешки (менеджеры контекста / декораторы), которые будут использоваться в разных тестах?

  • Каковы варианты использования для различных методов насмешки или они взаимозаменяемы?

  • Как бы я создал поддельные данные json / ожидаемого счета для использования с различными фиктивными объектами?

    from unittest.mock import patch, MagicMock
    from unittest.mock import Mock
    import unittest
    
    from source.src import scores
    from source.src.scores import add_score
    import source
    
    
    @patch('source.src.scores.request')
    def test_add_scores(self):
        columns = ["Match_ID", "Home_Score", "Away_Score"]
        values = [1, 1, 1]
    
        expected_score = {columns[i]: values[i] for i in range(len(columns))}
        json = {columns[i]:values[i] for i in range(len(columns)-1)}
    
        with patch('source.src.scores.mysql.connector') as patch_connector:
            self.assertIs(scores.mysql.connector, patch_connector)
    
            cursor = Mock()
            cursor.fetchone.return_value = values
            cursor.column_names = columns
            connect = Mock()
            connect.cursor.return_value = cursor
            patch_connector.connect.return_value = connect
    
            new_score = add_score()
    
            assert patch_connector.connect.called
            assert connect.cursor.called
            assert connect.commit.called
            assert cursor.fetchone.called
            self.assertEqual(cursor.execute.call_count, 2)
            self.assertDictEqual(expected_score, new_score)
    
    
    if __name__ == '__main__':
        test_add_scores()
    

Большое спасибо, ребята, действительно непостижимо, как тестироватьэто.

...