我很难学习测试驱动的开发。

我正在编写一个类,该类将使用文件名或文件描述并调整输入大小并从文件中返回数据的大小块。

首先开始进行测试时,我要做的只是测试所传递的参数是否不为空,并检查参数是否为有效的文件对象。

我所能鼓舞的全部是下面的代码,我应该使用setUp和tearDown方法,还是完全错误?我正在创建一个临时文件和定义为要在setUp()中读取的类的实例,并且我应该以某种方式在tearDown()中删除该对象。

下面是代码

class Test_FileChunk(unittest.TestCase):
    """
    """
    def setUp(self):
        self.fhandle, self.fname = mkstemp()
        self.fc_obj = FileChunk(filename=self.fname)

    def tearDown(self):
        try:
            os.remove(self.fname)
        except OSError as oserr:
            print(oserr)

    def test_instance_variables(self):
        self.assertIsNotNone(self.fc_obj.filename)
        self.assertIsNone(self.fc_obj.filehandle)
        self.assertEqual(self.fc_obj.chunk_size, 8192)

    def test_check_if_instance_variables_are_valid_file_objects(self):
        handle = open(self.fc_obj.filename
        self.assertEqual(
            hasattr
                (handle, "r"), 'seek'), True,
                    msg="Is not a valid file object")
        handle.close()

我在stackoverflow上经历了多个TDD问题,并提出了一些教程,但遵循TDD教程似乎很有趣,但实际上进行TDD却很困难。我实际上可以想到我想在ReadChunk类中做什么,但实际上我无法先找到测试然后编写代码。我能够考虑通过TDD检查传递的值是否是有效的文件对象,如果我没有TDD进行编码就不会发生,但是我不确定我是否正确使用了unittest。无法全面了解。任何人都可以提出建议,以及上面的代码是否正确。

最佳答案

关于您的代码

setUp和tearDown是可选的方法,可以帮助您进行设置,以及..拆除测试环境。例如,它们通常用于创建和删除临时文件夹以存储输出或在测试过程中建立(模拟的)数据库连接。

它们不应用于测试任何功能。因此,在设置中不应发生FileChunk对象的调用。在每个测试中,您都希望测试FileChunk中方法的特定情况,最好彼此独立。因此,您应该在每种新情况下都调用FileChunk的新实例。因此,在这种情况下,无论是test_instance_variables还是test_check_if_instance_variables_are_valid_file_objects。

关于TDD

使用纯TDD会改变观念。没有任何简单的教程可以为您提供帮助。因为已经写了有关如何使用TDD的整本书。

但是,我可以为您提供一些指导。

  • 标识您的类(class)的公共(public)接口(interface)。外部类应该可以使用哪些方法?这些方法的输入应该是什么,输出应该是什么?
  • 标识该方法的不同情况。什么时候应该输出true/false?什么时候应该抛出异常?
  • 根据您在2中找到的案例编写测试案例。
  • 为FileChunk编写最基本的虚拟类,该虚拟类实际上什么也不做,但是具有单元测试正在测试的所有功能。这样,所有测试都可以运行,尽管它们可能会失败。
  • 开始改进FileChunk类,直到所有测试通过。

  • 我认为TDD的一个重要方面是您不能仅仅开始进行测试。您应该真正知道该类的外观。

    关于python - 如何在此类的python unittest中使用setUp和tearDown,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24240166/

    10-12 22:12