使用pyuni在Python中正确导入模块进行单元测试

2024-09-25 00:33:27 发布

您现在位置:Python中文网/ 问答频道 /正文

单元测试问题

目标:目标是在测试计算.py在中对simpleCalc对象进行单元测试计算器.py.
问题:我无法从中成功导入simpleCalc对象计算器.py进入测试计算.py从项目中的单独目录运行testCalc时。
背景:中的单元测试测试计算.py当它包含在计算器.py,但当我将其移动到单独的文件夹并尝试导入中定义的simpleCalc对象时计算器.py,我得到一个错误。我正在尝试学习如何在一个简单的项目中使用pyUnit单元测试框架,显然我缺少一些关于如何在层次目录结构中导入单元测试模块的基本知识。下面描述的基本计算器测试项目是我为练习而创建的一个简单项目。你可以在这篇文章的结尾看到我已经看过的所有帖子。
终极问题:如何将simpleCalc对象导入到测试计算.py使用下面描述的目录层次结构?在

Github:https://github.com/jaybird4522/calculator_test/tree/unit_test

以下是我的目录结构:

calculator_test/
    calculatorAlgo/
        __init__.py
        calculator.py
    test_calculatorAlgo/
        __init__.py
        testCalc.py
        testlib/
            __init__.py
            testcase.py

这是计算器.py文件,它描述了我要单元测试的simpleCalc对象:

^{pr2}$

这是测试计算.py文件,其中包含单元测试:

# testCalc.py

import unittest
from calculatorAlgo.calculator import simpleCalc

class testCalc(unittest.TestCase):

    # set up the tests by instantiating a simpleCalc object as calc
    def setUp(self):
        self.calc = simpleCalc()

    def runTest(self):
        self.assertEqual(self.calc.subtract(7,3),4)

if __name__ == '__main__':
    unittest.main()

我一直在用简单的命令运行单元测试文件:

testCalc.py

我目前所做的努力

首次尝试
我尝试根据simpleCalc对象在目录结构中的位置导入它:

# testCalc.py

import unittest
from .calculatorAlgo.calculator import simpleCalc

class testCalc(unittest....

得到了这个错误:
值错误:尝试在非包中进行相对导入

第二次尝试
我尝试在没有相关引用的情况下导入它:

# testCalc.py

import unittest
import simpleCalc

class testCalc(unittest....

得到了这个错误:
ImportError:没有名为simpleCalc

第三次尝试
基于这篇文章http://blog.aaronboman.com/programming/testing/2016/02/11/how-to-write-tests-in-python-project-structure/,我尝试创建一个名为测试用例.py可以做相对的进口。在

# testcase.py

from unittest import TestCase
from ...calculator import simpleCalc

class BaseTestCase(TestCase):
    pass

把我的进口货换了测试计算.py在

# testCalc.py

import unittest
from testlib.testcase import BaseTestCase

class testCalc(unittest....

得到了这个错误:
ValueError:尝试在顶层包之外进行相对导入

其他资源
以下是我写过的一些没有用的帖子:
Import a module from a relative path
python packaging for relative imports
How to fix "Attempted relative import in non-package" even with __init__.py
Python importing works from one folder but not another
Relative imports for the billionth time

最终,我觉得我只是错过了一些基本的东西,即使在做了大量的研究之后。这感觉像是一个普通的设置,我希望有人能告诉我我做错了什么,并希望它能帮助其他人在将来避免这个问题。在


Tags: 对象frompytestimportself目录错误