2015-09-23 28 views
2

我正在爲我們的應用程序寫一些測試,我不確定我在測試這裏的正確的東西。這是我的考驗。self.assertTrue(False)它究竟測試了什麼

def test_ReservationExtensionFalseWrongResource(self): 
     'does not create a reservation that is an extension if different resource' 
     try: 
      reservation1 = Reservation.objects.create(user=self.regularUser1, resource=self.resource1, modality=self.modality, timeFrom=datetime(2015, 6, 11, 20, tzinfo=pytz.utc), timeTo=datetime(2015, 6, 11, 21, tzinfo=pytz.utc), count=1, notes=None, extendedReservation=None) 
      reservation = create_reservation(self.regularUser2, self.regularUser2, None, self.resource2, self.modality, datetime(2015, 6, 11, 20, tzinfo=pytz.utc), datetime(2015, 6, 11, 21, tzinfo=pytz.utc), 1, reservation1.uuid) 
      self.assertTrue(False, "Should not create reservation") 
     except Exception, e: 
      self.assertTrue(True, "Not authorized") 

我要確保,如果它是一個不同的資源的預留分機不能建立,所以這條線應該在try塊失敗:

reservation = create_reservation(self.regularUser2, self.regularUser2, None, self.resource2, self.modality, datetime(2015, 6, 11, 20, tzinfo=pytz.utc), datetime(2015, 6, 11, 21, tzinfo=pytz.utc), 1, reservation1.uuid) 

這是否:

self.assertTrue(False, "Should not create reservation") 

斷言預留創建會導致False值?或者我不正確地理解斷言匹配器。我試過了文檔,但在try catch塊中看不到任何類似的例子,這對我來說很明顯。

幫助表示讚賞。從python文檔

assertTrue(expr, msg=None) 

檢查是否給出expr

+0

@Gocht不,assertTrue不會像那樣工作 – levi

+0

哦,我在想AsserEqual – Gocht

回答

1

函數簽名是True。在情況下exprFalse,它會使用所提供的消息(msg

self.assertTrue(True, "Not authorized") # Is always True 

self.assertTrue(False, "Should not create reservation") # Is always False and it will throw an error saying "Should not create reservation" 

您try塊內,從而產生一個錯誤,如果任何異常沒有被引發,self.assertTrue(False, "Should not create reservation")將拋出一個錯誤,因爲FalseTrue

如果發生異常,則您的代碼將進入Except block, self.assertTrue(True, "Not authorized")不會引發任何錯誤,因爲True爲真。

所以,如果你想拋出一個異常,如果發生任何異常,移動self.assertTrue(False, "Should not create reservation")到除塊

except Exception, e: 
    self.assertTrue(False, "Should not create reservation") 
0

我可能不會設置我的測試這樣。你想要做的是確定你的方法的行爲,並相應地進行測試。

所以,如果你正在測試一個失敗案例,讓我們說,例如,你的方法返回類似「保留失敗」,如果失敗的話,那麼你應該做這樣的事情,而不是:

# where msg is the response of your call 
self.assertEqual(msg, "reservation failed", "assertion failed") 
1

雖然不是對標題的直接回答,但這應該回答你的實際問題。

  1. 你永遠不應該捕獲Exception(除非你重新評估它)。

    except Exception, e: 
    

    當您處理異常時,您必須指定想要捕捉的確切錯誤。例如,調用create_reservation的代碼可能會捕獲您定義的ReservationError異常。

    如果要使此代碼正常工作,則必須再測試並確保create_reservation會提高正確的錯誤。所以即使在測試中,你仍然必須使用正確的錯誤。

  2. 如果您需要測試某些代碼引發異常,請使用相應的斷言,即assertRaises。它可以以兩種方式使用。無論是作爲一個電話:

    self.assertRaises(ReservationError, create_reservation, self.regularUser2, .........) 
    

    ,或者您可以使用它作爲一個上下文管理器,使用with關鍵字(需要Python 2.7或Python 3.1或更新版本):

    with self.assertRaises(ReservationError): 
        create_reservation(self.regularUser2, ...........) 
    

    兩個例子將運行create_reservation,檢查它是否引發異常,如果是,則通過它是正確的類型,否則失敗。