在这个简单的单元测试中,只能运行一个测试用例。当我注释掉测试用例时,剩下的测试运行,传递,模块正常终止。当我允许运行两个测试用例时,第一个案例通过,第二个案例永远不会终止。该模块永远不会终止。我创建了具有相同案例的其他模块,每个测试用例总是可以单独运行。
我无法弄清楚发生了什么,除了单元测试中一个奇怪的错误的远程可能性(通常不是正确的结论 - 我的代码总是罪魁祸首)。
from glob import glob
from email import message_from_string
from database import login_info
import maildb
import unittest
import mysql.connector as DBC
db = DBC.connect(**login_info)
curs = db.cursor()
TBLDEF = """
CREATE TABLE message (
msgID INTEGER AUTO_INCREMENT PRIMARY KEY,
msgMessageID VARCHAR(128),
msgText LONGTEXT
)"""
FILESPEC = "C:/PythonData/*.eml"
class testRealEmail_traffic(unittest.TestCase):
def setUp(self):
"""
Reads arbitrary number of email messages and stores them
in a brand new messages table.
Destroys any previous table named message.
"""
curs.execute("DROP TABLE IF EXISTS message")
db.commit()
curs.execute(TBLDEF)
db.commit()
files = glob(FILESPEC)
self.msgids = {}
self.message_ids = {}
for f in files:
ff = open(f)
text = ff.read()
msg = message_from_string(text)
id = self.msgids[msg['message-id']] = maildb.store(msg)
self.message_ids[id] = msg['message-id']
def test_not_empty(self):
"""
Make sure the setUp method created messages and loaded the table.
"""
curs.execute("SELECT COUNT(*) FROM message")
messagecount = curs.fetchone()[0]
self.assertGreater(messagecount, 0, "Database message table is empty")
def test_a_test(self):
self.assertEqual(1,1)
if __name__ == "__main__":
unittest.main()
答案 0 :(得分:0)
你对全局变量是正确的。 db和curs需要在setUp中。此外,正在测试的代码使用全局变量连接到同一个数据库并将光标连接到同一个数据库。不知道问题究竟在哪里,但是这会让mysql中的进程停顿。将连接和光标创建移动到实际功能中解决了这个问题。