2017-06-19 150 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

我被卡住了。這就是我發佈的原因。不管怎麼說,還是要謝謝你。 –