2012-08-31 27 views
5

Tôi đang làm việc trên một dự án Django nhưng tôi nghĩ rằng đây là một câu hỏi tinh khiết Python unittest.Làm thế nào tôi có thể nhận được của Python unittest để không bắt ngoại lệ?

Thông thường, khi bạn chạy thử nghiệm, ngoại lệ sẽ bị bắt bởi người thử nghiệm và được xử lý tương ứng.

Đối với mục đích gỡ lỗi, tôi muốn vô hiệu hóa hành vi này, ví dụ: để:

python -i manage.py test 

sẽ đột nhập vào vỏ Python tương tác trên một ngoại lệ, như bình thường.

Làm cách nào để thực hiện điều đó?

EDIT: dựa trên câu trả lời cho đến nay, có vẻ như đây là câu hỏi cụ thể hơn về Django so với tôi nhận ra!

Trả lời

4

Bạn có thể sử dụng django-nose runner thử nghiệm, nó hoạt động với các thử nghiệm unittest và chạy thử nghiệm của bạn như python manage.py test -v2 --pdb. Và mũi sẽ chạy pdb cho bạn.

+0

Cảm ơn. Tôi đã nghe thấy mũi được đề cập rất nhiều với những lợi ích khác nhau như thế này, và nó nằm trong danh sách việc cần làm của tôi để học, nhưng bây giờ, tôi hy vọng có một cách để làm điều này mà không có nó. Bạn có biết nếu nó chắc chắn là không thể với các Á hậu thử nghiệm tiêu chuẩn? – Ghopper21

+0

Nó không tốt đẹp, nhưng bạn có thể bắt ngoại lệ của bạn trong mã của bạn và chạy pdb. –

+0

FYI, tôi đang cố gắng tìm ra cách cài đặt django-mũi, trông rất tuyệt. Nó cho tôi gặp rắc rối cho đến nay ... Xem http://stackoverflow.com/questions/12215520/how-to-get-django-nose-installed-correctly – Ghopper21

3

Ứng dụng mới django-pdb làm cho ứng dụng này đẹp hơn, hỗ trợ chế độ vi phạm các lỗi kiểm tra hoặc ngoại lệ không bắt buộc trong mã thông thường.

+0

Thú vị! Đang xem ... – Ghopper21

+0

+1, tính năng này hoạt động độc đáo với cờ 'manage.py test --pdb' mới. Bây giờ tôi đang cố gắng cài đặt django-mũi để tôi có thể so sánh hai cách tiếp cận này. (Btw, tôi sẽ tiếp tục sử dụng django-pdb dù sao đi nữa vì nó là những cải tiến gỡ lỗi khác.) – Ghopper21

0

Bạn có thể thử một cái gì đó như thế này trong một module trong gói của bạn, sau đó sử dụng CondCatches(ngoại lệ của bạn,) trong mã của bạn:

# System Imports 
import os 

class NoSuchException(Exception): 
    """ Null Exception will not match any exception.""" 
    pass 

def CondCatches(conditional, *args): 
    """ 
    Depending on conditional either returns the arguments or NoSuchException. 

    Use this to check have a caught exception that is suppressed some of the 
    time. e.g.: 
    from DisableableExcept import CondCatches 
    import os 
    try: 
     # Something like: 
     print "Do something bad!" 
     print 23/0 
    except CondCatches(os.getenv('DEBUG'), Exception), e: 
     #handle the exception in non DEBUG 
     print 'Somthing has a problem!', e 
    """ 
    if conditional: 
     return (NoSuchException,) 
    else: 
     return args 

if __name__ == '__main__': 
    # Do SOMETHING if file is called on it's own. 
    try: 
     print 'To Suppress Catching this exception set DEBUG=anything' 
     print 1/0 
    except CondCatches(os.getenv('DEBUG'), ValueError, ZeroDivisionError), e: 
     print "Caught Exception", e 
Các vấn đề liên quan