我想在高中编程课的评估中加入单元测试。在
如果我提交了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模块不是这里最好的方法,但是我仍然对如何实现它感兴趣。在
可以使用^{} 从特定文件加载Python模块,然后在每个模块上运行测试用例。在
^{} 可能有助于创建文件列表。在
考虑到这个问题已经持续了一个月没有答案,我已经意识到这是因为我要求的是错误的东西。在
据我所知,unittest用于在单个应用程序上运行一组测试。它不是为在一组应用程序上运行单个测试而设计的。在
约翰关于调查importlib的建议帮助我走上了成功的道路。谢谢约翰。在
在原始post更新中发布的代码似乎是解决我的问题的最合适的解决方案。在
相关问题 更多 >
编程相关推荐