簡體   English   中英

使用Unittest Python進行測試

[英]Testing with Unittest Python

我正在使用Python Unittest進行runninig測試。 我正在運行測試,但是我想進行否定測試,我想測試一個函數拋出異常是否可以通過,但是如果沒有異常拋出則測試失敗了。 我的腳本是:

    try:
        result = self.client.service.GetStreamUri(self.stream, self.token)
        self.assertFalse
    except suds.WebFault, e:                        
        self.assertTrue
    else:
        self.assertTrue

即使函數正常運行,此傳遞也​​始終為True。 我還嘗試了其他各種方法,包括:

    try:
        result = self.client.service.GetStreamUri(self.stream, self.token)
        self.assertFalse
    except suds.WebFault, e:                        
        self.assertTrue
    except Exception, e:
        self.assertTrue

有沒有人有什么建議?

謝謝

我嘗試過assertRaises卻沒有運氣。

    try:
        result = self.client.service.GetStreamUri(self.stream, self.token)
        self.assertRaises(WebFault)
    except suds.WebFault, e:                        
        self.assertFalse
    except Exception, e:                        
        self.assertTrue

它仍然通過。 由於某種原因,它不會嘗試執行assertRaises語句。 我也嘗試過:(該功能應該失敗,但測試應該通過)

    try:
        result = self.client.service.GetStreamUri(self.stream, self.token)

    except suds.WebFault, e:                        
        self.assertFalse
    except Exception, e:                        
        self.assertTrue
    else:
        self.assertFalse

由於某種原因,即使函數通過,它也不會引發錯誤。 無論異常如何,總是如此。 除非有其他聲明,否則它將繼續執行。

找到了一種行之有效的方法,但似乎做事卻很糟糕:

有人可以建議一種更清潔的方式嗎?

    try:
        result = self.client.service.GetStreamUri(self.stream, self.token)

    except suds.WebFault, e:                        
        self.assertFalse
    except Exception, e:
        pass

    try:
        result==result
    except:
        result=None
    if result==None:
        assert True
    else:
        assert False

TestCase.assertRaises是您所需要的,但是在您的示例中,您似乎在稍微濫用它。 您需要類似:

def test_GetStreamUri(self):
    self.assertRaises(WebFault, self.client.service.GetStreamUri)
    result = self.client.service.GetStreamUri(self.stream, self.token)

您需要在調用可調用對象之前告訴unittest有關可調用對象的信息,它將引發異常。

您是否嘗試過assertRaises

出色的鼻子單元測試提供了@raises裝飾器

@raises(TypeError)
def test_raises_type_error():
    raise TypeError("This test passes")

您可能應該調用self.assertTrue(True)self.assertFalse(True) ,因為您現在還沒有真正調用函數,只是引用了它們。 不過,必須有一種更清潔的方法來執行此操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM