- 此问题在此处已有答案**:
(19个答案)
四年前关闭了。
我尝试在Python中使用'unittest'做一个简单的测试,看看如果一个类得到了一个不适合构造函数的输入,它是否会抛出异常。
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
我的测试如下:
class ConstructorTestCase(unittest.TestCase):
def testEmptyString(self):
self.assertRaises(TypeError, ukol1.SummaryFormula(), "testtest")
if __name__ == '__main__':
unittest.main()
我所希望的只是测试失败,这意味着不处理构造函数输入不合适的异常。
相反,我得到了一个错误:__init__() takes exactly two arguments (1 given)
.
我漏掉了什么?我应该说明的第二个参数是什么?
另外,我应该使用什么类型的Error来处理异常,即一个与我的regexp不匹配的输入被传递给了构造函数?
5条答案
按热度按时间ioekq8ef1#
一种更像Python的方法是使用
with
命令(在Python 2.7中添加的):文件:* Assert加薪 *
4sup72z82#
assertRaises
有点令人困惑,因为您需要为它提供可调用项,而不是进行调用的表达式。将代码更改为:
在你的代码中,你自己调用构造函数,构造函数会因为参数不足而引发异常,这时你需要给
assertRaises
一个可调用对象(ukol1.SummaryFormula),以及调用它的参数("testtest"),然后它就可以调用它,捕捉并检查异常。uujelgoq3#
这是因为类在示例化对象时需要一个参数。
当你经过时
您应该已经将参数summaryFormula传递给它。
另外,混淆的原因是类名是SummaryFormula,而传递给
__init__
的参数也是SummaryFormula或者这应该是
kqlmhetl4#
由于其他答案都没有指出如何使用封装导致异常的代码的上下文,因此下面介绍如何使用该上下文。
此
unittest.case._AssertRaisesContext
中感兴趣的属性包括:mw3dktmi5#
更通用的替代格式是
如果你的构造函数是多态的,并且你想循环遍历一系列不同的参数编写错误,这是很有用的,例如: