在这个简单的单元测试中,只能运行一个测试用例。当我注释掉任一测试用例时,剩余的测试将运行、通过,并且模块正常终止。当我允许运行两个测试用例时,第一个案例通过,第二个案例永远不会终止。模块永远不会终止。我创建了具有相同案例的其他模块,并且每个测试用例始终可以单独运行。
我无法弄清楚发生了什么,除了 unittest 中出现奇怪错误的可能性很小(通常不是正确的结论——我的代码总是罪魁祸首)。
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()