如何为鼻子编写测试套件

时间:2014-12-02 11:19:21

标签: python-2.7 nose test-suite unit-testing

如果我想编写单元测试,我只需将文件放在我的test/子目录中,我的测试类将从unittest.TestCase中删除。

现在我想在测试套件中使用这样的模式:我在test/中有一个python文件,其中有一个类(扩展unittest.TestSuite),它读取文件并从中生成测试。我已经有了解析文件的代码并从中生成了TestCase。

但鼻子没有发现这个类。如何让鼻子知道这个文件并从中生成测试?

1 个答案:

答案 0 :(得分:1)

您没有指定您正在使用的python版本。使用Python 2.7+,您可以在模块中定义一个load_tests函数,该函数将被调用以为模块创建TestSuite。

但是,nose会忽略load_tests协议。如果你有nose2,那么它的加载测试协议会有plugin

否则,您创建一个空白TestCase并填充生成的测试函数。例如:

import unittest

data = ["a", "b", "c"] # or from whatever source you want

class GeneratedTests(unittest.TestCase):

    def setUp(self):
        self.correct = "b"

def setup_module():
    for i, d in enumerate(data):
        test_driver = create_driver(d)
        name ="test_generated{}".format(i)
        setattr(GeneratedTests, name, test_driver)

def create_driver(d):
    def test_driver(self):
        self.assertEqual(d, self.correct)
    return test_driver

setup_module()

最后一种方法是使用subtest context manager。这仅适用于3.4+。但是,你可以找到一个穷人的替代here。希望它能帮助您以更易读的方式构建生成的测试。