2012-07-07 50 views
3

我想assertRaise在一個條件引發自定義異常消息的函數內的異常。用assertRaise測試異常消息

功能:

if not Cart.objects.filter(member=member).count(): 
    raise CartDoesNotExist("Cart Does Not Exist for Member: %s (%id)." % (member.email,member.id)) 

現在,我能夠成功地生產所要求的條件去raise語句。

所以,我的測試用例是這樣的:

def Order_CartDoesNotExist(self):   
    self.assertRaises(CartDoesNotExist,Order.objects.create_order(member=self.member2,member_slot=self.memslot,order_type="Normal")) 

當我運行測試,輸出是一個錯誤。它給出了同樣的錯誤CartDoesNotExist .....

所以我的問題是,如何提高這些異常?如何在我們的單元測試中涵蓋這些情況?我不想逃避這些條件,因爲它們很重要,並且增加了代碼覆蓋率?

謝謝大家。

回答

4

您的代碼直接調用create_order,這會引發異常。你需要改變它的調用方式。在Python 2.7,你可以使用這個:

with self.assertRaises(CartDoesNotExist): 
    Order.objects.create_order(member=self.member2, member_slot=self.memslot, order_type="Normal")) 

這裏的上下文管理器可以讓你直接打電話給你的代碼,以及上下文管理器將處理這個異常爲您服務。

如果您正在使用2.6或以下運行:

self.assertRaises(CartDoesNotExist, Order.objects.create_order, member=self.member2, member_slot=self.memslot, order_type="Normal") 

在這裏你是不是叫你的功能,你將它傳遞給assertRaises,它需要的自變量一起,並assertRaises將調用的代碼和妥善處理例外情況。

+3

即時工作......謝謝先生.....有沒有辦法檢查輸出消息「購物車不存在........」? – 2012-07-07 04:27:50

+1

@arindamroychowdhury請參閱[這裏](http://stackoverflow.com/questions/8672754/how-to-show-the-error-messages-caught-by-assertraises-in-unittest-in-python2-7)獲取異常細節的提示。 – jasondoucette 2015-06-07 18:56:08