Python 单元测试在失败后继续

标签 python unit-testing nose

unittest 失败后继续测试的最佳方式是什么? ?

#!/usr/env/bin python2.7

import unittest
from fib import fib


class FibTests(unittest.TestCase):

    def test_0(self):
        self.assertEqual(fib(0), 0)
        self.assertEqual(fib(1), 1)
        self.assertEqual(fib(2), 1)
        self.assertEqual(fib(5), 5)
        self.assertEqual(fib(10), 55)

    def test_1(self):
        self.assertEqual(fib(0), 1)

    def test_2(self):
        self.assertEqual(fib(1), 0)
        self.assertEqual(fib(5), 0)

if __name__ == '__main__':
    suite = unittest.TestLoader().loadTestsFromTestCase(FibTests)
    result = unittest.TextTestRunner(verbosity=2).run(suite)

查看 test_2,它只会告诉我有 1 次失败,而不是 2 次。

此外,我如何收集最后的结果:

test_0 -- 0 failures
test_1 -- 1 failures
test_2 -- 2 failures

动机:

我正在尝试创建一个测试游戏。人们提交测试,如果他们未通过其他项目,他们就会获得分数;每次测试失败记一分。提供此类功能的最简单方法是什么?

最佳答案

您必须将每个测试用例分成不同的方法。为了更轻松地创建新测试/节省打字时间,您可以根据这样的输入自动生成测试用例

#!/usr/env/bin python2.7

import unittest
from fib import fib


class FibTests(unittest.TestCase):
    pass

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

if __name__ == '__main__':
    cases = ((fib(1), 1), (fib(2), 1), (fib(5), 5))
    for index, case in enumerate(cases):
        test_name = 'test_{0}'.format(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)

关于Python 单元测试在失败后继续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14372287/

相关文章:

java - Powermock - 模拟静态类成员

python - 在 virtualenv 中使用 Nose 的问题

python - django doctests 没有运行

java - 如何解析 tensorflow 模型的字符串输出

python - scrapy,我正在尝试删除提取到 csv 文件的空行

python - 在一个点文件中解析多个有向图

objective-c - OCMock 期待一个类方法

java - 如何识别其他 JUnit 测试何时窃取我的 Spring Root Controller ?

python - 在 Python 中使用 lxml 库编写 xml 文件

python - 如何使用 nosetests 分别组织和运行单元测试和功能测试