2013-03-30 52 views
0

我有單元測試作爲蟒蛇PostgreSQL的單元測試沒有完成執行

class TestUser(TestCase): 
    def setUp(self): 
     print 'setting db up' 
     db.create_all() 

    def test_new_user(self): 
     user = User('[email protected]', 'welcome') 
     db.session.add(user) 
     db.session.commit() 
     users_in_db = User.query.all() 
     self.assertEquals(1, len(users_in_db)) 
     self.assertEquals(user.email, users_in_db[0].email) 
     self.assertEquals(user._password, users_in_db[0]._password) 
    def tearDown(self): 
     print 'destroying db' 
     db.drop_all() 

當我在命令行運行它,我看到

python -m unittest discover 
secret key: test secret key 
db url: postgresql+psycopg2://testuser:[email protected]/mydb 
setting db up 
destroying db 

但它從來沒有出來,繼續掛,我做錯了什麼? 我是新來的單元測試在Python中,不知道如何測試當我必須連接到數據庫。請告知

回答

0

經過一段時間的努力和環顧四周,以下開始爲我工作。 它效率低下,因爲它會刪除所有表併爲每個測試再次創建它們,但現在根據用例,它很好,稍後會添加優化。

除了通過高德納說

「過早的優化是一切罪惡的根源」

class TestUser(TestCase): 
    def setUp(self): 
     db.create_all() 

    def session_commit(self): 
     try: 
      db.session.commit() 
     except: 
      db.session.rollback() 
     finally: 
      pass 

    def test_new_user(self): 
     """ 
     test that new user is persisted in database 
     """ 
     user = User('[email protected]', 'welcome') 
     db.session.add(user) 
     self.session_commit() 
     users_in_db = db.session.query(User).all() 
     self.assertEquals(1, len(users_in_db)) 
     self.assertEquals(user.email, users_in_db[0].email) 
     self.assertEquals(user._password, users_in_db[0]._password) 

    def tearDown(self): 
     db.session.close() 
     for tbl in reversed(db.metadata.sorted_tables): 
      db.engine.execute(tbl.delete())