我编写了一个名为Consumer.py的模块,其中包含一个类(Consumer)。该类使用配置文件进行初始化,该文件包含用于计算的不同参数以及用于记录的loq que的名称。
我想为这个类编写单元测试,所以我创建了一个名为test_Consumer.py的脚本,其中包含一个名为TestConsumerMethods(unittest.TestCase)的类。
现在,我所做的是创建一个名为cons的Consumer类的新对象,然后我用它来调用类方法进行测试。例如,Consumer有一个简单的方法来检查给定目录中是否存在文件。我所做的测试看起来像这样
import Consumer
from Consumer import Consumer
cons = Consumer('mockconfig.config', 'logque1')
class TestConsumerMethods(unittest.TestCase):
def test_fileExists(self):
self.assertEqual(cons.file_exists('./dir/', 'thisDoesntExist.config), False)
self. assertEqual(cons.file_exists('./dir/', thisDoesExist.config), True)
这是测试我班级的正确方法吗?我的意思是,理想情况下我只想使用类方法而不必实例化类,因为"隔离"代码,对吧?
答案 0 :(得分:2)
不要让全局对象进行测试,因为它打开了一个状态将通过一次测试设置在其上并且影响另一个状态的可能性。
每项测试都应该独立进行,完全独立于其他测试。
相反,要么在测试中创建对象,要么通过将其放入setUp方法为每个测试自动创建它:
import Consumer
from Consumer import Consumer
class TestConsumerMethods(unittest.TestCase):
def setUp(self):
self.cons = Consumer('mockconfig.config', 'logque1')
def test_fileExists(self):
self.assertEqual(self.cons.file_exists('./dir/', 'thisDoesntExist.config), False)
self. assertEqual(self.cons.file_exists('./dir/', thisDoesExist.config), True)
至于你是否真的需要实例化你的类,这取决于类的实现。我认为通常你会期望实例化一个类来测试它的方法。
答案 1 :(得分:0)
我不确定这是否是您要搜索的内容,但您可以在文件末尾添加测试,如下所示:
#!/usr/bin/python
...
class TestConsumerMethods(...):
...
if __name__ == "__main__":
# add your tests here.
这样,通过执行包含类定义的文件,可以执行放在if
语句中的测试。
这样,只有直接执行文件本身才会执行测试,但是如果从中导入类则不会执行。