Tom*_*tny 12 python testing unit-testing exception-handling
我试图使用unittest在Python中进行一个简单的测试,看看如果一个类在构造函数中获得不合适的输入时是否抛出异常.这个类看起来像这样:
class SummaryFormula:
def __init__( self, summaryFormula):
self.atoms = {}
for atom in re.finditer( "([A-Z][a-z]{0,2})(\d*)", summaryFormula):
symbol = atom.group(1)
count = atom.group(2)
if pocet != "":
self.atoms[ symbol] = int(count)
else:
self.atoms[ symbol] = 1
Run Code Online (Sandbox Code Playgroud)
我的测试如下:
class ConstructorTestCase(unittest.TestCase):
def testEmptyString(self):
self.assertRaises(TypeError, ukol1.SummaryFormula(), "testtest")
if __name__ == '__main__':
unittest.main()
Run Code Online (Sandbox Code Playgroud)
我想要的只是测试失败,这意味着不处理构造函数的不合适输入的异常.
相反,我得到一个错误:__init__() takes exactly 2 arguments (1 given).
我错过了什么?我应该指定的第二个参数是什么?
另外,我应该使用什么类型的错误来处理异常,即我的regexp无法匹配的输入被传递给构造函数?
托马斯,谢谢你
Ned*_*der 20
assertRaises 有点令人困惑,因为你需要给它可调用,而不是一个调用它的表达式.
将您的代码更改为:
self.assertRaises(TypeError, ukol1.SummaryFormula, "testtest")
Run Code Online (Sandbox Code Playgroud)
在您的代码中,您自己调用构造函数,并且它引发了一个关于没有足够参数的异常.相反,你需要给出assertRaises可调用的(ukol1.SummaryFormula),以及用它来调用它的参数("testtest").然后它可以调用它,捕获并检查异常.
Pra*_*ush 16
更pythonic的方法是使用with命令(在Python 2.7中添加):
with self.assertRaises(SomeException):
do_something()
Run Code Online (Sandbox Code Playgroud)
文档:https://docs.python.org/2/library/unittest.html#unittest.TestCase.assertRaises
pyf*_*unc 13
那是因为你的类在实例化对象时需要一个参数
在你路过的时候
ukol1.SummaryFormula()
Run Code Online (Sandbox Code Playgroud)
你应该已经将参数summaryFormula传递给它.
ukol1.SummaryFormula(someSummaryFormula)
Run Code Online (Sandbox Code Playgroud)
另外,混淆是因为您的类名是SummaryFormula,您传递给的参数__init__也是SummaryFormula
或者应该这样
self.assertRaises(TypeError, ukol1.SummaryFormula, "testtest")
Run Code Online (Sandbox Code Playgroud)
由于其他答案都没有指出如何使用封装导致异常的代码的上下文,因此您可以这样做。
with self.assertRaises(ValueError) as ctx:
<some code that throws an exception>
expected_msg = 'foo_bar_baz'
self.assertEquals(ctx.exception.message, expected_msg)
Run Code Online (Sandbox Code Playgroud)
对此感兴趣的属性unittest.case._AssertRaisesContext是:
| 归档时间: |
|
| 查看次数: |
22392 次 |
| 最近记录: |