在多个文件上运行Python unittest测试

2024-09-29 02:27:04 发布

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

我想在高中编程课的评估中加入单元测试。在

如果我提交了20份类似这样的文件:

def calculateReturn(principle, rate, freq, time):
    final = principle * (1 + (rate/freq)) ** (freq * time)
    return final

我能用这样的测试用例吗?在

^{pr2}$

如何在20个模块上运行这个简单的测试?在

更多信息

为了测试,我创建了三个“提交”,它们都显示了计算x^y的不同方法

提交1.py:

from math import pow

def powerFunction(base, power):
   result = pow(base, power)
   return result

提交2.py:

def powerFunction(base, power):
    result = base ** power
    return result

提交3.py:

def powerFunction(base, power):
    result = 1
    for i in range(power):
        result = result * base

    return result

测试代码为:

import unittest
import importlib

class MyTest(unittest.TestCase):
    def setUp(self):
        pass

    def test_power_3_4(self):
        self.assertEqual(module.powerFunction(2, 3), 8)

files = ['submission1', 'submission2', 'submission3']
for file in files:
    module = importlib.import_module(file)
    print module
    unittest.main()

如果运行测试代码,控制台输出仅显示正在测试的submission1:

/System/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7
/Users/staff/PycharmProjects/UnitTest/powerTest.py
<module 'submission1' from '/Users/staff/PycharmProjects/UnitTest/
submission1.pyc'>
.
----------------------------------------------------------------------
Ran 1 test in 0.000s

OK

Process finished with exit code 0

有趣的是,如果不使用单元测试,我可以使用以下方法正确导入和测试:

import importlib

files = ['submission1', 'submission2', 'submission3']

for file in files:
    module = importlib.import_module(file)
    print module
    print module.powerFunction(2,3)

这里的控制台输出是:

/System/Library/Frameworks/Python.framework/Versions/2.7/bin/
python2.7 /Users/staff/PycharmProjects/UnitTest/importlib1.py
<module 'submission1' from '/Users/staff/PycharmProjects/UnitTest/
submission1.pyc'>
8.0
<module 'submission2' from    '/Users/staff/PycharmProjects/UnitTest/
submission2.pyc'>
8
<module 'submission3' from   '/Users/staff/PycharmProjects/UnitTest/
submission3.pyc'>
8

Process finished with exit code 0

很可能unittest模块不是这里最好的方法,但是我仍然对如何实现它感兴趣。在


Tags: frompyimportbasereturndefunittestresult
2条回答

可以使用^{}从特定文件加载Python模块,然后在每个模块上运行测试用例。在

^{}可能有助于创建文件列表。在

考虑到这个问题已经持续了一个月没有答案,我已经意识到这是因为我要求的是错误的东西。在

据我所知,unittest用于在单个应用程序上运行一组测试。它不是为在一组应用程序上运行单个测试而设计的。在

约翰关于调查importlib的建议帮助我走上了成功的道路。谢谢约翰。在

在原始post更新中发布的代码似乎是解决我的问题的最合适的解决方案。在

相关问题 更多 >