2014-12-02 58 views
1

如果我想编写单元测试,我只需将我的test/子目录下的一个文件放入我的测试类unittest.TestCase中进行heriting。如何编写鼻子测试套件

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

但鼻子没有检测到这个类。我怎样才能让鼻子知道这个文件并从中生成测试?

回答

1

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

但是,鼻子忽略了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。希望它能帮助你以更可读的方式构建你生成的测试。

+0

理想情况下,我想针对兼容性问题的Python 2.7。 – Kartoch 2014-12-02 12:37:08

+0

问题已经更新与蟒蛇版本 – Kartoch 2014-12-02 12:37:23

+0

这绝对是我正在寻找,但为蟒蛇2.7和鼻子。 – Kartoch 2014-12-02 12:38:24