python - 如何模拟一个csv文件

标签 python csv mocking

我有一个 csv 解析器模块,它解析非常特定类型的 .csv 文件并从中提取字段。现在为了测试这个模块,我正在编写一些单元测试。传统上,为了测试模块,我会创建一个格式相同但条目有限的示例 csv 文件,然后将此文件传递给模块并检查输出。显然这不是很好,因为对测试文件本身有依赖性。

解决这个问题的正确方法是什么?我已经阅读了有关 mock 模块以及它如何模拟事物的信息。但我不知道如何模拟特定文件。

最佳答案

您没有提供任何测试数据,所以我希望我的随机示例能够很好地解决您的问题。简而言之:如果您不想在测试期间创建临时文件对象(这是一个合理的约束,imo),请使用 StringIOmock 模块有一个很大的进入障碍,所以除非你想要它更高级的 mock 功能,否则没有必要使用它。

from io import StringIO
from csv import reader  # this should import your custom parser instead

in_mem_csv = StringIO("""\
col1,col2,col3
1,3,foo
2,5,bar
-1,7,baz""")  # in python 2.7, put a 'u' before the test string
test_reader = reader(in_mem_csv, delimiter=',', quotechar='|')
for line in test_reader:
    print(line)
    # whatever you need to test to make sure the csv reader works correctly

输出:

['col1', 'col2', 'col3']
['1', '3', 'foo']
['2', '5', 'bar']
['-1', '7', 'baz']

替代字符串格式

我个人更喜欢用三重字符串来表示文件,普通字符串可能更适合您的情况。请参阅此示例,了解如何方便地换行而不更改字符串的值。

in_mem_csv = StringIO(
    "col1,col2,col3\n"
    "1,3,foo\n"
    "2,5,bar\n"
    "-1,7,baz\n"
)

关于python - 如何模拟一个csv文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47830223/

相关文章:

python - 如何使用 python 结构对远程服务器上存在的文件进行更改/编辑?

python - 为什么用户在 Django 测试用例中自动进行身份验证?

r - 保存到 CSV 时日期信息消失

python - 如何使用 DictReader 和 DictWriter 只写字段的子集

java - 为 jOOQ 单元测试创​​建一个类似对象的任意表

java - 用其他方法模拟一个方法

python - 海象运算符 : if contition with strange results

python - 使用 Beautiful Soup 保存实体进行抓取

php - 将数据透视表模板从 csv(Excel) 移动到 MySQL

java - 捕获先前的值以验证模拟对象