2010-07-21 44 views
12

Tôi đang cố gắng kiểm tra ngoại lệ.Bài kiểm tra đơn vị Bài toán với assertRaises

tôi có:

def test_set_catch_status_exception(self): 
    mro = self.mro 
    NEW_STATUS = 'No such status' 
    self.assertRaises(ValueError,mro.setStatus(NEW_STATUS)) 

tôi nhận được lỗi sau:

====================================================================== 
ERROR: test_set_catch_status_exception (__main__.TestManagementReviewGoalGetters) 
---------------------------------------------------------------------- 
Traceback (most recent call last): 
    File "test_ManagementReviewObjective.py", line 68, in test_set_catch_status_exception 
    self.assertRaises(ValueError,mro.setStatus(NEW_STATUS)) 
    File "/Users/eric/Dropbox/ManagementReview.py", line 277, in setStatus 
    raise ValueError('%s is not in the list of allowed statuses: %s' % (status,LIST_OF_STATUSES)) 
ValueError: No such status is not in the list of allowed statuses: ['Concern or Delay', 'On Track', 'Off Track/Needs Attention'] 

---------------------------------------------------------------------- 

Cảm ơn

Trả lời

29

self.assertRaises hy vọng một hàm mro.setStatus, tiếp theo là một số tùy ý của lập luận: trong trường hợp này, chỉ NEW_STATUS. self.assertRaises lắp ráp các đối số của nó vào lệnh gọi hàm mro.setStatus(NEW_STATUS) bên trong khối try...except, do đó bắt và ghi lại ValueError nếu xảy ra.

Chuyển mro.setStatus(NEW_STATUS) làm đối số cho self.assertRaises làm cho ValueError xảy ra trước self.assertRaises có thể bẫy.

Vì vậy, việc sửa chữa là thay đổi dấu ngoặc đơn để dấu phẩy:

self.assertRaises(ValueError,mro.setStatus,NEW_STATUS) 
+0

Điều đó đã làm nó! Cảm ơn. :) –

+0

@Eric: Không sao cả.  – unutbu

+0

Tôi đang sử dụng python 3.3 interpreter trong pycharm IDE. Điều gì sẽ xảy ra nếu tôi muốn chuyển đối số cho hàm đang được kiểm tra và cũng bao gồm thông báo trong trường hợp lỗi mong muốn không được nâng lên? Ví dụ - 'self.assertRaises (ValueError, person.set_age_method, -10," Lỗi: Tuổi của người đó không thể âm. ")' Với điều này, tôi nhận được một ngoại lệ: 'set_age_method lấy 2 đối số vị trí nhưng 3 đã được đưa ra'. Làm thế nào để sửa lỗi này? Btw, các tài liệu cho xác nhận này không nói rõ với bạn làm thế nào để làm điều đó. https://docs.python.org/3/library/unittest.html#unittest.TestCase.assertRaises. ** kwds là gì? – testerjoe2

Các vấn đề liên quan