脚本运行正常,但不能让pytest工作

时间:2018-03-27 20:23:32

标签: python-3.x unit-testing csv pytest

尝试学习pytest,以下脚本运行正常,但是使用pytest它会失败,因为它无法找到csv文件。

import csv

def load_data(file):
    mast_list = []
    with open(file) as csvfile:
        data = csvfile.read()
        phone_masts = data.split('\n')
        columns = csv.reader(phone_masts, delimiter=',')

        for row in columns:
            if len(row) > 0:
                mast_list.append(row)
    return mast_list

我正在努力让某些东西工作,所以试图测试该函数返回一个列表类型,但它说没有找到csv文件。我确定还有很多其他问题,但我一次尝试做一下。这是测试:

import pytest
import mobile_phone_data

def test_column_count():
    file = 'Mobile Phone Masts.csv'
    assert load_list() == type(list)

为什么脚本可以自行运行,但测试失败,因为它无法找到csv文件?

1 个答案:

答案 0 :(得分:1)

实际上有点令人惊讶的是你得到一个文件未找到错误:你在一个名字下创建一个函数并尝试测试一个不同的函数,这是一个错误开始。

我打电话给您的第一个商家信息foo.py并修改您的测试脚本如下:

test_foo.py

from foo import load_data

def test_column_count():
    file = 'spam.csv'
    assert isinstance(load_data(file), list)

还有一个名为spam.csv的文件,所有三个文件都在同一个文件夹中。 pytest运行此测试并通过。

代码中的其他问题:

  • 你的csv导入做了不必要的事情 - 你不必艰难地拆分换行符,使用reader参数instaed
  • isinstance应该用于类型检查
  • 您可能正在为单元测试创​​建临时文件并将其销毁
  • 初始函数load_data()可以分为两部分:一部分读取文件,另一部分解析其内容,最终使其更容易测试。