我正在对将条目保存在数据库“ mydatabase”中的程序进行单元测试。因此,一旦我测试了每个功能,就需要还原数据库,以免影响其他测试。我试图使用os.system()编写一个mysql命令来还原。以下是程序的相关部分:
class testSql(unittest.TestCase):
def setUp(self,
dbName = "mydatabase",
existingUser = "John",
nonExistingUser = "thisnamedoesnotexist",
):
os.system('mysql -u root -ppassword mydatabase < "mypath/schema.sql"')
self.dbName = dbName
self.existingUser = existingUser
self.nonExistingUser = nonExistingUser
def test_signUp(self):
self.assertFalse(sql.userExists(self.nonExistingUser))
sql.signUp(self.nonExistingUser,"password")
self.assertTrue(sql.userExists(self.nonExistingUser))
但是,当我运行程序时,没有显示测试结果,而是仅查看mysql命令的结果,并且终端冻结,因此我无法输入任何内容并被迫将其关闭:[C0 ]
我尝试过的:使用os.system创建函数并调用它;导入具有该功能的文件;使用exec()函数执行带有该语句的文件;导入文件以执行该语句。
显然,os.system(“ mysql -u root -ppassword”)很好,但是还没有restore和dump命令。有谁知道如何解决此问题或以其他方式实现我的目标?
好吧,我发现问题是当用户已经存在时,我没有提交数据库,这导致连接没有关闭,而当我尝试创建另一个数据库(即使用mysql命令)时,后者永远等到第一个结局。
为了避免这种情况:提交或关闭与数据库的连接,或者在创建另一个与数据库的连接之前关闭游标(或使用相同的游标进行还原)。