[英]Testing a python class with nosetests
尽管花了数小时在网上浏览文档和各种博客文章,但我仍然不知道该怎么做。
我有一堂课:
class ExampleClass(object):
def __init__(self,x,y):
self.x = x
self.y = y
def add(self):
return self.x+self.y
def multiply(self):
return self.x*self.y
现在,假设我要编写一些测试,以检查方法的加法和乘法是否达到了我希望它们执行的操作。
在我的测试文件中,我有:
class TestExampleClass(object):
def setup(self):
class_object = ExampleClass(1,1)
def test_add(self):
assert class_object.add() == 2
def test_multiply(self):
assert class_object.multiply() == 1
但是,我得到一个NameError:全局名称“ class_object”未定义。
我真的不确定如何实现我想要的目标,即用一些我理解和知道的数据实例化一个类对象,并测试这些数据上的方法是否返回了我应该知道的东西。
您正在描述的错误是因为您的TestExampleClass没有
def __init__(self):
在里面。 因此,它永远不会绕过实际创建class_object的过程。
从代码的编写方式来看,我认为您希望setup(self)
实际上是__init__(self)
编辑您到处也都需要self.x
等(如在单独的答案中所述)。 这不是您要报告的错误的原因,但是它将是您放入__init__
后将看到的错误的原因。
因此,大量借鉴了其他答案,但添加了__init__
:
class ExampleClass(object):
def __init__(self, x, y):
self.x = x
self.y = y
def add(self):
return self.x + self.y
def multiply(self):
return self.x * self.y
class TestExampleClass(object):
def __init__(self):
self.class_object = ExampleClass(1, 1)
def test_add(self):
assert self.class_object.add() == 2
def test_multiply(self):
assert self.class_object.multiply() == 1
要制作/访问实例变量,您需要使用self
限定变量:
class ExampleClass(object):
def __init__(self, x, y):
self.x = x
self.y = y
def add(self):
return self.x + self.y
def multiply(self):
return self.x * self.y
class TestExampleClass(object):
def setup(self):
self.class_object = ExampleClass(1, 1)
def test_add(self):
assert self.class_object.add() == 2
def test_multiply(self):
assert self.class_object.multiply() == 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.