【问题标题】:Running a Python unittest test on multiple files对多个文件运行 Python unittest 测试
【发布时间】:2017-06-19 00:25:39
【问题描述】:

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

如果我提交了 20 份如下所示的文件:

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()

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

更多信息

为了测试,我创建了三个“提交”,所有这些都显示了计算 x^y 的不同方法。

提交1.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()

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

/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 python-2.7 unit-testing


    【解决方案1】:

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

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

    【讨论】:

    • @AndrewH:不,您必须自己尝试一下,如果遇到困难,请提出更具体的问题。
    • 我卡住了。这就是我发帖的原因。还是谢谢。
    • 好的,那么您是否尝试过使用importlibglob?如果是这样,请发布您的代码。
    【解决方案2】:

    鉴于这个问题已经活跃了一个月而没有任何答案,我意识到这是因为我要求的是错误的东西。

    据我所知,unittest 用于在单个应用程序上运行一套测试。它并非旨在对一套应用程序运行单一测试。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-16
      • 2010-11-07
      • 1970-01-01
      • 2017-10-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多