在Python包中运行测试时未定义函数

时间:2019-02-13 03:03:37

标签: python testing

我正在创建Python 程序包/库。我的目录结构如下所示:

my_package/
|-- my_package/
|   |-- tests/
|   |   |-- __init__.py
|   |   |-- my_tests.py
|   |   
|   |-- __init__.py
|   |-- main.py
|
|-- setup.py

我在 main.py 文件中拥有所有功能:

def sum_nums(a,b):
    res = a + b
    return(res)

def mult_nums(a,b):
    res = a * b
    return(res)

def sub_nums(a,b):
    res = a - b
    return(res)

my_tests.py 看起来像这样:

from unittest import TestCase

import my_package

def test_sum():
    assert sum_nums(3,4) == 7

def test_mult():
    assert mult_nums(3,4) == 12

def test_sub():
    assert sub_nums(3,4) == -1

当我从软件包根目录运行测试时,如下所示:

python setup.py test

...我收到以下错误

NameError: name 'sum_nums' is not defined
  • 我的软件包目录结构是否正确?
  • 我是否缺少_ init _.py文件?
  • 每个目录是否都需要_ init _.py文件?
  • 可以将我的所有函数放在单个main.py文件中吗 不使用if name ==“ main ”吗?

2 个答案:

答案 0 :(得分:2)

您需要指出被测试的功能是针对my_package软件包的,例如:

from unittest import TestCase

import my_package

def test_sum():
    assert my_package.sum_nums(3,4) == 7

def test_mult():
    assert my_package.mult_nums(3,4) == 12

def test_sub():
    assert my_package.sub_nums(3,4) == -1

答案 1 :(得分:0)

测试不应放在包装中,因此请将其向上移动一个目录。例如,参见sanic或github中的任何其他模块。您的功能需要在 init .py中可用。您可以像在sanic中一样导入它们。

https://github.com/huge-success/sanic

您还需要

from my_package import sum_nums, mult_nums, sub_nums 

或以my_package开头。