【问题标题】:Testing a python class with nosetests用鼻子测试测试一个python类
【发布时间】:2015-01-10 14:56:34
【问题描述】:

尽管我花了几个小时在网上浏览文档和各种博客文章,但我仍然没有弄清楚如何做到这一点。

我有一堂课:

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

现在假设我想编写一些测试来检查方法 add 和 multiply 是否符合我的要求。

在我的测试文件中,我有:

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”。

我真的不确定我应该如何实现我想要的,即用我理解和知道的一些数据来实例化一个类对象,并测试这些数据上的方法是否返回了我所知道的应该。

【问题讨论】:

    标签: python unit-testing nosetests


    【解决方案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
    

    【讨论】:

      【解决方案2】:

      您描述的错误是因为您的 TestExampleClass 没有

      def __init__(self):
      

      在里面。所以它永远不会真正创建 class_object。

      从代码的编写方式来看,我认为您希望 setup(self) 实际上是 __init__(self)

      edit 您还需要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
      

      【讨论】:

      • setup 没问题,只要 OP 使用 nosetests
      猜你喜欢
      • 1970-01-01
      • 2018-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多