2017-06-19 152 views
2

我想将单元测试添加到我的高中编程课的评估中。对多个文件运行Python单元测试测试

如果我有一个像这样的文件二十意见:

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

我可以用一个测试案例也是这样吗?

import unittest 

class test(unittest.TestCase): 
    def test1(self): 
     value = calculateReturn(5000, 0.05, 12, 11) 
     self.assertAlmostEqual(value, 8235.05, 2) 

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

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

更多信息请

因为我创造了三个“意见”无不彰显计算X^Y的不同方式的测试。

submission1.py:

from math import pow 

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

submission2.py:

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

submission3.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模块是不是在这里最好的办法,但我仍然有兴趣在如何实现它。

回答

0

鉴于这是一个月没有答案活跃,我已经认识到,这是因为我要求错误的事情。

从我可以收集的内容来看,unittest是针对单个应用程序运行一套测试。它不是为了在一套应用程序上运行单个测试而设计的。

约翰的调查importlib的建议帮助我走上了成功之路。谢谢约翰。

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

0

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

glob可能有助于创建文件列表。

+0

谢谢约翰。你能提供一些示例代码吗? –

+0

@AndrewH:不,你必须亲自尝试,如果遇到困难,可以提出更具体的问题。 –

+0

我被卡住了。这就是我发布的原因。不管怎么说,还是要谢谢你。 –