美文网首页
pytest入门——针对函数做边界检测

pytest入门——针对函数做边界检测

作者: 转身丶即天涯 | 来源:发表于2020-07-06 16:46 被阅读0次

前言

单元测试的目的是保证函数的健壮性,所以需要对要测试的函数进行边界测试。

准备工作

python3.6及以上
pytest

案例

有一个函数check_data_accuracy(df),用于检查DataFrame中无限接近于的0的数值,并将其置为0。
将数值介于-1.0e-38和1.0e-38之间的数置为0。

单元测试
  1. 项目结构
    src/check_util.py 检查函数
    test/test_check_util.py 测试脚本


    image.png
  2. 首先在项目中建立test目录,并创建测试脚本,命名方式'test_xxx.py',一般而言,xxx为要测试的模块的名字。


    image.png
  3. 编写测试用例
    src/check_util.py

# -*- coding: UTF-8 -*-
"""
各种检查工具函数
version: 2020-06-29
"""
import pandas as pd
from pandas.api.types import is_numeric_dtype


def check_data_accuracy(df):
    """
    用于检查df中的浮点数类型是否超过的redshfit的double范围。若超过置为np.nan,否则会引起copy失败。
    """
    for column in df.columns:
        if is_numeric_dtype(df[column]):
            s = pd.Series(df[column])
            s[(s > -1.0e-38) & (s < 1.0e-38)] = 0
            df[column] = s

    return df

test/test_check_util.py

import sys
import os
sys.path.append(os.path.dirname(os.path.dirname(__file__)))

import pandas as pd

from src.check_util import check_data_accuracy


"""
check_util.check_data_accuracy 测试
"""


def test_check_data_accuracy_small_float():
    """
    测试 1.12e-323 是否变为0
    :return:
    """
    mock_data = {
        'a': [1, 2, 3],
        'b': [1.12e-323, 1.1245, 789]
    }
    mock_df = pd.DataFrame(mock_data)

    res_df = check_data_accuracy(mock_df)

    assert res_df['b'][0] == 0


def test_check_data_accuracy_negative():
    """
    测试 -1.12e-323 是否变为0
    :return:
    """
    mock_data = {
        'a': [1, 2, 3],
        'b': [-1.12e-323, 1.1245, 789]
    }
    mock_df = pd.DataFrame(mock_data)

    res_df = check_data_accuracy(mock_df)

    assert res_df['b'][0] == 0


def test_check_data_accuracy_positive():
    """
    测试 e38的正数是否正常
    :return:
    """
    mock_data = {
        'a': [1, 2, 3],
        'b': [1.12e+38, 1.1245, 789]
    }
    mock_df = pd.DataFrame(mock_data)

    res_df = check_data_accuracy(mock_df)

    assert res_df['b'][0] == 1.12e+38
  1. 执行单元测试脚本
    一版而言,有两种方式运行单元测试脚本。
  • 一种是直接执行pytest命令。
  • 另一种是"pytest xxx.py",xxx是测试脚本的名字。
  1. 查看测试结果


    image.png

    绿点表示成功,红点表示失败。

相关文章

网友评论

      本文标题:pytest入门——针对函数做边界检测

      本文链接:https://www.haomeiwen.com/subject/exguuctx.html