2012-01-09 215 views
2

我有一個關於unittest的問題。 如何進行測試以查看是否有異常? 一個例子:如何測試是否在單元測試中出現異常

基準(3,32,2012)

如果我叫類基準像這樣,在一個月不在範圍內(> 31),這一切就OK了,它拋出一個異常,那OK 。但是我想做一個單元測試,如果異常是好的,如果是捕獲一個異常確定..? 我做了一些測試,但這些只有真正的價值觀,他們沒事。我不知道如何測試這種方式..並在互聯網上搜索.. 感謝您的答覆。

import date,datetime 

class Datum(): 
    def __init__(self,day,month,year): 
     try: 
      d=int(day) 
      dvm=stevilodnivmesecu(month,year) 
      if (d>=1 and d<=dvm): 
       self.d=d 
      else: 
       raise Exception("Day out of moth range") 
     except: 
      raise ValueError("Day is not a number") 
     try: 
      m=int(month) 
      if m>=1 and m<=12: 
       self.m=m 
      else: 
       raise Exception("Month out of range") 
     except: 
      raise ValueError("Month is not a number") 
     try: 
      l=int(year) 
      if l>=1000 and l<=9999: 
       self.l=l 
      else: 
       raise Exception("Year is out of range") 
     except: 
      raise ValueError("Year is not a number") 

    def __repr__(self): 
     return repr(self.d)+"."+repr(self.m)+"."+repr(self.l) 

def monthrange(month,year): 
    if month==2: 
     if jeprestopno(year)==True: 
      return 29 
     elif jeprestopno(year)==False: 
      return 28 
    elif month>=1 and month<=7: 
     if month%2!=0: 
      return 31 
    elif month>7 and month<=12: 
     if month%2==0: 
      return 31 
    elif month>=1 and month<=7: 
     if month%2==0: 
      return 30 
    elif month>7 and month<=12: 
     if month%2!=0: 
      return 30 
    else: 
     pass 

def oneplusyear(year): 
    if year%4==0 or (year!=100 and year%4==0) or (year%400==0 and year%100==0): 
     return True 
    else: 
     return False 
+1

您在這裏的異常處理非常廣泛。 Bare「except」是非常危險的,你一次只用4個語句來查看一個字符串是否不能轉換爲int。 – 2012-01-09 19:25:33

+0

我如何檢查範圍? – greg 2012-01-09 20:07:10

回答

8

使用

self.assertRaises(ValueError,Datum,3,32,2012) 
unittest.TestCase測試斷言 Datum(3,32,2012)提出了 ValueError

參考:

+0

感謝您的文檔鏈接和答案! – greg 2012-01-09 20:10:32

+0

如果它回答你的問題,你應該接受它。 – ratkok 2012-09-07 18:45:48

相關問題