在这个简单的单元测试中,只能运行一个测试用例。当我注释掉任何一个测试用例时,剩下的测试运行通过,并且模块正常终止。当我允许两个测试用例都运行时,第一个用例通过,而第二个用例永远不会终止。模块永远不会终止。我创建了其他具有相同用例的模块,每个测试用例总是可以单独运行。
除了 unittest 中可能出现奇怪的 bug(通常不是正确的结论 - 我的代码总是罪魁祸首),我无法弄清楚发生了什么。
除了 unittest 中可能出现奇怪的 bug(通常不是正确的结论 - 我的代码总是罪魁祸首),我无法弄清楚发生了什么。
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()
tearDown()
中触发。此外,db
和curs
是全局的看起来不对。我希望它们在setUp()
中创建并附加到self
上。保持打开连接和表引用可能会导致数据库中的开销和减速,因为它不能简单地丢弃数据。虽然我必须承认我对MySQL一无所知,所以我可能完全错了。 - Ulrich Eckhardt