使用 Unittest Python 进行测试

chr*_*ley 2 python testing unit-testing exception

我正在使用 Python Unittest 运行测试。我正在运行测试,但我想做负面测试,我想测试一个函数是否抛出异常,它通过,但如果没有抛出异常,则测试失败。我的脚本是:

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

即使函数完美运行,这也始终传递为 True。我还尝试了各种其他方式,包括:

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

有没有人有什么建议?

谢谢

我试过 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
Run Code Online (Sandbox Code Playgroud)

它仍然通过。出于某种原因,它不会尝试执行该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
Run Code Online (Sandbox Code Playgroud)

出于某种原因,即使函数通过它也不会引发错误。无论异常发生什么,它总是如此。除非有 else 语句,否则它会继续。

找到了一种有效的方法,但它似乎是一种非常糟糕的做事方式:

任何人都可以建议一种更清洁的方法吗?

    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
Run Code Online (Sandbox Code Playgroud)

Ten*_*she 5

TestCase.assertRaises是您所需要的,但是在您的示例中,您似乎稍微滥用了它。你需要这样的东西:

def test_GetStreamUri(self):
    self.assertRaises(WebFault, self.client.service.GetStreamUri)
    result = self.client.service.GetStreamUri(self.stream, self.token)
Run Code Online (Sandbox Code Playgroud)

unittest在调用可调用对象之前,您需要告知可调用对象将引发异常。