定时鼻子测试没有正确失败

时间:2013-01-17 22:16:32

标签: python unit-testing nose

我有以下测试,在运行特别长的fib断言时不会失败。

未正确失败的测试

#!/usr/env/bin python2.7

import unittest
from fib import fib
from nose.tools import timed


def test_gen(expected, actual):
    @timed(.001)
    def test_method(self):
        return self.assertEqual(expected, actual)
    return test_method

if __name__ == '__main__':
    all_cases = {
        'user': ((fib(40), 102334155), (fib(2), 1), (fib(5), 5)),
    }
    fails = {}
    for username, cases in all_cases.items():
        class FibTests(unittest.TestCase):
            pass

        for index, case in enumerate(cases):
            test_name = 'test_{0}_{1}'.format(username, index)
            test = test_gen(case[1], case[0])
            setattr(FibTests, test_name, test)

        suite = unittest.TestLoader().loadTestsFromTestCase(FibTests)
        result = unittest.TextTestRunner(verbosity=2).run(suite)
        fails[username] = len(result.failures)
    print fails

(慢)Fib.py实施

def fib(x):
    if x == 0:
        return 0
    elif x == 1:
        return 1

    return fib(x - 2) + fib(x - 1)

测试失败

import unittest
from fib import fib
from nose.tools import timed


def test_gen(expected, actual):
    @timed(.001)
    def test_method(self):
        time.sleep(.2)
        return self.assertEqual(expected, actual)
    return test_method

1 个答案:

答案 0 :(得分:1)

您正在计时错误,并且从未实际调用过您的测试方法。您还需要花费大量精力来动态创建并将您的案例添加到您的类中,除了支持生成器测试用例之外,它不会作为测试的容器,这将比您拥有的更容易阅读和遵循这里。此外,这是一个测试文件还是一段产品代码?如果它是一个测试文件,那么if __name__ == '__main__'中的所有代码都有点奇怪,如果它是产品代码文件,那么拥有test_gen函数和unittest和{ {1}}在unoditionally run部分中的import语句没有多大意义。我建议按照以下方式执行此操作,而不是尝试使测试脚本自行运行;只需用鼻子启动它。

nose