繁体   English   中英

使用鼻子测试测试python类

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM