Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-What';在不同的类中统一测试方法的正确方法是什么?_Python - Fatal编程技术网

Python-What';在不同的类中统一测试方法的正确方法是什么?

Python-What';在不同的类中统一测试方法的正确方法是什么?,python,Python,我编写了一个名为Consumer.py的模块,其中包含一个类(Consumer)。该类使用一个配置文件进行初始化,该文件包含用于计算的不同参数和用于日志记录的loq que的名称 我想为这个类编写单元测试,所以我编写了一个名为test_Consumer.py的脚本,其中包含一个名为TestConsumerMethods的类(unittest.TestCase) 现在,我所做的是创建一个名为cons的Consumer类的新对象,然后使用它调用类方法进行测试。例如,使用者有一个简单的方法来检查给定目

我编写了一个名为Consumer.py的模块,其中包含一个类(Consumer)。该类使用一个配置文件进行初始化,该文件包含用于计算的不同参数和用于日志记录的loq que的名称

我想为这个类编写单元测试,所以我编写了一个名为test_Consumer.py的脚本,其中包含一个名为TestConsumerMethods的类(unittest.TestCase)

现在,我所做的是创建一个名为cons的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)

这是测试我的班级的正确方法吗?我的意思是,理想情况下,我希望只使用类方法而不必实例化类,因为要“隔离”代码,对吗?

我不确定这是否是您要搜索的,但您可以在文件末尾添加测试,如下所示:

#!/usr/bin/python

...

class TestConsumerMethods(...):
    ...

if __name__ == "__main__":
    # add your tests here.
这样,通过执行包含类定义的文件,可以执行在
if
语句中进行的测试


这样,仅当您直接执行文件本身时才会执行测试,但如果您从文件中导入类,则不会执行测试。

我不确定这是否是您要搜索的内容,但您可以在文件末尾添加测试,如下所示:

#!/usr/bin/python

...

class TestConsumerMethods(...):
    ...

if __name__ == "__main__":
    # add your tests here.
这样,通过执行包含类定义的文件,可以执行在
if
语句中进行的测试


这样,仅当您直接执行文件本身时,测试才会执行,但如果您从文件中导入类,则不会执行测试。

不要创建要测试的全局对象,因为它可能会导致某个状态被一个测试设置,并影响另一个测试

每个测试都应该独立运行,并且完全独立于其他测试

相反,可以在测试中创建对象,也可以通过将对象放入设置方法,为每个测试自动创建对象:

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)

至于您是否真的必须实例化您的类,这取决于类的实现。我认为,一般来说,您会希望实例化一个类来测试其方法。

不要创建一个全局对象来测试,因为它可能会导致某个状态被一个测试设置,并影响另一个测试

每个测试都应该独立运行,并且完全独立于其他测试

相反,可以在测试中创建对象,也可以通过将对象放入设置方法,为每个测试自动创建对象:

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)

至于您是否真的必须实例化您的类,这取决于类的实现。我认为,通常情况下,您会希望实例化一个类来测试其方法。

这样做的问题是,这是运行测试的唯一方法。您无法使用unittest发现它们,也无法在CI中轻松运行它们setup@SpoonMeiser的确,这是正确的,但是如果您需要一种简单的方法来实现一些测试(例如,不需要单元测试知识),那么这可能是一个好方法。但这仍然是实现测试的简单快捷的方法,它有局限性。我认为这完全取决于你需要什么,这是一种其他方法。问题是,这是你运行测试的唯一方法。您无法使用unittest发现它们,也无法在CI中轻松运行它们setup@SpoonMeiser的确,这是正确的,但是如果您需要一种简单的方法来实现一些测试(例如,不需要单元测试知识),那么这可能是一个好方法。但这仍然是实现测试的简单快捷的方法,它有局限性。我认为这完全取决于你需要什么,这是其他人的一种方式。这是有道理的,谢谢!是否还需要删除tearDown()中的对象?@Zazz通常情况下,不会为每个测试实例化
TestConsumerMethods
,并且每次它都会构造一个新的
使用者。旧的消费者会像其他超出范围的东西一样被垃圾收集。如果您需要显式释放某些资源或其他资源,只需在
拆卸中执行某些操作。这很有意义,谢谢!是否还需要删除tearDown()中的对象?@Zazz通常情况下,不会为每个测试实例化
TestConsumerMethods
,并且每次它都会构造一个新的
使用者。旧的消费者会像其他超出范围的东西一样被垃圾收集。如果需要显式释放某些资源或其他资源,则只需在
拆卸中执行某些操作。