この単純な単体テストでは、1 つのテスト ケースのみを実行できます。いずれかのテスト ケースをコメント アウトすると、残りのテストが実行され、合格し、モジュールが正常に終了します。両方のテスト ケースの実行を許可すると、最初のケースは成功し、2 番目のケースは決して終了しません。モジュールは決して終了しません。同じケースで他のモジュールを作成しましたが、各テストケースは常に個別に実行できます。
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()