【问题标题】:creating pandas data frame in unittest在单元测试中创建熊猫数据框
【发布时间】:2016-12-24 12:03:59
【问题描述】:

尝试在我的 unittest 文件中创建 Pandas 数据框时遇到了一个我不明白的问题。错误发生在类中的函数被调用之前。

这是一个简单的重现代码:

import unittest
import pandas as pd
import numpy as np

class simpleTest(unitest.TestCase):
    dates = pd.date_range('20160101', periods = 5)
    dataDf = pd.DataFrame({'date': dates,
            'count': np.array([3, 7, 4, 66, 9])})

    def doSomething(self):
        pass

if __name__ == '__main__':
    unittest.main()

我得到的错误是这样的:

Traceback (most recent call last):
  File "tsa_test.py", line 31, in <module>
    unittest.main()
  File "/usr/local/Cellar/python/2.7.12/Frameworks/Python.framework/Versions/2.7/lib/python2.7/unittest/main.py", line 94, in __init__
    self.parseArgs(argv)
  File "/usr/local/Cellar/python/2.7.12/Frameworks/Python.framework/Versions/2.7/lib/python2.7/unittest/main.py", line 149, in parseArgs
    self.createTests()
  File "/usr/local/Cellar/python/2.7.12/Frameworks/Python.framework/Versions/2.7/lib/python2.7/unittest/main.py", line 158, in createTests
    self.module)
  File "/usr/local/Cellar/python/2.7.12/Frameworks/Python.framework/Versions/2.7/lib/python2.7/unittest/loader.py", line 130, in loadTestsFromNames
    suites = [self.loadTestsFromName(name, module) for name in names]
  File "/usr/local/Cellar/python/2.7.12/Frameworks/Python.framework/Versions/2.7/lib/python2.7/unittest/loader.py", line 100, in loadTestsFromName
    parent, obj = obj, getattr(obj, part)
AttributeError: 'module' object has no attribute '-'

【问题讨论】:

    标签: pandas python-unittest


    【解决方案1】:

    您的单元测试代码有问题。你在子类化unittest.TestCase 方面做得对,所以这一行没问题:

    class simpleTest(unitest.TestCase):
    

    不过,这个类现在应该有如下所示的方法:

         def test_foo(self):
             ...
    

    (请注意,它们应以test_ 开头,并应以self 开头)。任何此类方法的省略都会使 unittest 感到困惑。

    另外,您有静态类成员,您可能打算将其用作类固定装置。那是not how it's done in unittest。你的类应该是这样的:

    class simpleTest(unitest.TestCase):
        @classmethod
        def setUpClass(cls):
            cls.dates = pd.date_range('20160101', periods = 5)
            cls.dataDf = pd.DataFrame({'date': cls.dates,
                'count': np.array([3, 7, 4, 66, 9])})
    
        def test_foo(self):
            # Note that here you access things like so:
            self.dataDF
            # even though you defined it as a class instance - that's how unittest works
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-10
      • 1970-01-01
      • 2015-09-12
      • 2016-08-28
      • 1970-01-01
      • 1970-01-01
      • 2020-09-21
      • 1970-01-01
      相关资源
      最近更新 更多