2014-02-22 50 views
3

我寫了一個單元測試,它應該比較從我的方法返回的Column對象。我在測試中創建一個,然後從我的課程中獲得一個。我的測試代碼如下所示:如何正確比較兩個SQLAlchemy Column對象與Python的unittest?

def test_getting_correct_sa_object_from_column(self): 
    table = self.database.get_table_by_name('ESEventlogMain') 
    column = table.get_column_by_name('eventdata') 
    sa_column = sqlalchemy.Column('eventdata', sqlalchemy.Integer, primary_key=False) 

    self.assertEqual(sa_column, column.get_sa_object()) 

我的類的方法返回此:

def get_sa_object(self): 
    if self.type == 'int': 
     sa_type = sqlalchemy.Integer 
    elif self.type == 'varchar': 
     sa_type = sqlalchemy.String(self.length) 

    return sqlalchemy.Column(self.name, sa_type, primary_key=self.is_primary_key) 

當我運行測試時,出現這樣的輸出:

Failure 
Traceback (most recent call last): 
    File "C:\Users\tames.mctigue\PycharmProjects\db_setup_wizard\tests.py", line 107, in test_getting_correct_sa_object_from_column 
    self.assertEqual(sa_column, column.get_sa_object()) 
AssertionError: Column('eventdata', Integer(), table=None) != Column('eventdata', Integer(), table=None) 

AssertionError顯示看起來像相同的數據,所以我堅持要尋找什麼。除了「assertEqual」之外,還有其他比較我應該使用嗎?

+0

什麼是真的想在這裏測試?那些數據庫表存在並且它們具有您期望的名稱的列?這些列具有與預期相同的數據類型?還要別的嗎? – van

+0

我實際上並沒有創建任何表格。現在我只想確保該方法返回正確類型的列。 – Tamerz

回答

0

嘗試使用直接列,例如:

def test_getting_correct_sa_object_from_column(self): 
    table = self.database.get_table_by_name('ESEventlogMain') 
    column = table.get_column_by_name('eventdata') 
    sa_column = table.eventdata # <- Change this column 

    self.assertEqual(sa_column, column.get_sa_object())