【问题标题】:How to test if saved csv file is correct如何测试保存的csv文件是否正确
【发布时间】:2019-06-26 23:01:26
【问题描述】:

我有一个小函数,它什么都不返回,而是创建 csv 文件。 如果给定的输出 csv 文件包含正确的数据,我想对其进行单元测试。 我怎样才能做到这一点?

功能

def create_csv(input, output)
    df = pd.read_csv(input, names=['number1', 'number2'])
    df.number1 *= 2
    df.number2 *= 5
    df.to_csv(output, index=False, header=False)

【问题讨论】:

  • 保存前打印
  • 我不想打印
  • 你传递给inputoutput参数的是什么?
  • 输入输出文件的路径

标签: python pandas unit-testing mocking


【解决方案1】:

在将数据框保存到 CSV 文件之前对其进行测试。 NumPy test scriptsPandas test functions 可能会有所帮助。如果您觉得需要测试 CSV 文件本身,那么您实际上是在不信任 pandas 的 to_csv() 函数。那么最好的做法是review the unit tests of pandas,如果您觉得缺少它,请发出拉取请求,用您认为缺少的测试来修改它。

【讨论】:

    【解决方案2】:

    .to_csv.read_csv 使用缓冲区和字符串路径。 The docs for those methods 建议使用 io.StringIO 作为打开文件或文件路径的替代方案。

    在单元测试中,在测试时使用io.StringIO对象传递给函数。类似这样的功能的简单测试

    import unittest, io
    class TestOne(unittest.TestCase):
        def setUp(self):
            s = '''3,4\n2,1\n5,6'''
            self.fakecsv = io.StringIO(s)
            self.fakefile = io.StringIO()
            self.result = '''6,20\n4,5\n10,30\n'''
    
        def test_create(self):
            create_csv(self.fakecsv, self.fakefile)
            self.fakefile.seek(0)
            self.assertEqual(self.fakefile.read(), self.result)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-25
      • 2010-09-14
      • 2011-02-16
      • 2011-04-27
      • 2011-08-04
      • 2013-06-01
      相关资源
      最近更新 更多