Python Unittest - MySQL Зависает, если введен неправильный ключ? - PullRequest
1 голос
/ 03 февраля 2020

У меня странная проблема MySQL в моих модульных тестах, я делаю что-то вроде ниже:

@patch("myobject.MyObject._some_method")
def test_sync_db(self, mock_m):
    test_data = {
        "id": "1",
        "description": "Some text",
    }

    # Run the code in the test
    myobj = MyObject()
    myobj.some_data = test_data
    myobj.doSomethingWithDb()

    # Read the DB to make sure the correct changes were made
    myobj.db.connect()
    data = myobj.db.read_data(test_data["id"])
    print(data["descriptionn"])
    myobj.db.disconnect()

Приведенный выше код работает нормально, пока он не достигнет второй последней строки, я специально поставил дополнительный Символ «n» в конце, так как нет ключа, соответствующего «descriptionn», я ожидаю, что код взломает sh. Однако вместо того, чтобы код завис и MySQL завис, вся таблица базы данных облажалась, и мне пришлось перезапустить сервер MySQL, чтобы восстановиться после этого. Я не могу понять, почему это происходит, myobj.db.read_data буквально просто возвращает fetchone() из объекта MySQLdb.

РЕДАКТИРОВАТЬ: В соответствии с запросом, это действительно то, что doSomethingWithDb() делает:

def doSomethingWithDb(self):
    self.db.connect()
    for data in self.some_data:
        exists = self.db.read_data(data["id"])
        if exists:
            self.db.update_data(exists)
        else:
            self.db.create_data(exists)
    self.db.disconnect()


EDIT 2: Adding problematic code:
The self.db.read_data method does the following:

    def read_data(self, ...):
        ...
        self.dbcurs.execute(params)
        data = self.dbcurs.fetchone()
        return data


The problem is fixed if I add in `self.dbconn.commit()` immediately after the `data = self.dbcurs.fetchone()` line, not sure why though.  If anyone can explain then I will accept that as an answer.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...