Python 相关单元测试

Python 相关单元测试,python,unit-testing,python-unittest,Python,Unit Testing,Python Unittest,我有一个程序,它根据作为输入的对象参数和存储在数据库中的信息给出输出 我试图用两个测试用例来测试这个程序,第一个没有给出参数。然后,我的程序将创建一个默认的parameters对象,并将其作为输出的一部分返回,然后第二个测试将对parameters对象进行特定更改,并将其作为输入返回给程序 目前,我正在通过将两个测试用例合并为一个来实现这一点,以便能够将parameters对象保存在局部变量中,并对其进行更改,然后将其用于第二个测试用例: def test_function: testD

我有一个程序,它根据作为输入的对象参数和存储在数据库中的信息给出输出

我试图用两个测试用例来测试这个程序,第一个没有给出参数。然后,我的程序将创建一个默认的parameters对象,并将其作为输出的一部分返回,然后第二个测试将对parameters对象进行特定更改,并将其作为输入返回给程序

目前,我正在通过将两个测试用例合并为一个来实现这一点,以便能够将parameters对象保存在局部变量中,并对其进行更改,然后将其用于第二个测试用例:

def test_function:
    testData = {'name':"Test"}        
    response = self.app.post('/test', data=testData)
    # make assert statements for first response
    parameters = json.loads(response.data)['parameters']
    parameters['foo'] = "bar"
    testData['parameters'] = parameters
    response = self.app.post('/test', data=testData)
    # make assert statements for second response
有没有办法在两个单独的测试用例中实现这一点?或者更重要的是,我是否应该在两个单独的测试用例中执行此操作,因为如果第一个测试用例不工作,第二个测试用例将无法运行


我无法为第二个测试用例硬编码parameters对象,因为它依赖于数据库中的数据,测试的部分原因是为了查看程序是否适用于不同的/无数据。

如果您想使用已知的开始状态开发多个测试,请查看使用该函数

下面是python网站上的一个简单示例:

import random
import unittest

class TestSequenceFunctions(unittest.TestCase):

    def setUp(self):
        self.seq = range(10)

    def test_shuffle(self):
        # make sure the shuffled sequence does not lose any elements
        random.shuffle(self.seq)
        self.seq.sort()
        self.assertEqual(self.seq, range(10))

        # should raise an exception for an immutable sequence
        self.assertRaises(TypeError, random.shuffle, (1,2,3))

    def test_choice(self):
        element = random.choice(self.seq)
        self.assertTrue(element in self.seq)

    def test_sample(self):
        with self.assertRaises(ValueError):
            random.sample(self.seq, 20)
        for element in random.sample(self.seq, 5):
            self.assertTrue(element in self.seq)

if __name__ == '__main__':
    unittest.main()

开始状态不一定是已知的,因为我进行测试的部分原因是确保程序在数据库中使用不同/无数据运行。更新了原始帖子以传达这一点。在安装程序中运行self.app.post()一次,只是为了获取parameters对象,然后再将其与修改后的parameters对象一起用于测试用例,这样做可以吗?@sephernazari使用
setUp
的目的是确保您的测试环境处于已知状态(好或坏)。如果这需要向DB写入(post),则无论如何,这是一种良好的做法。如果对数据库的写入是为了开始测试数据库的实际功能,那么不是。您是否希望获得数据库的原始值,然后进行更改,并最终确保进行了更改?不完全是,但是在这些方面的某个地方:我的函数获取DB的原始值,如果不存在,则使用它创建一个parameters对象并进行一些计算。然后在实际程序中,用户可以通过GUI更改参数,然后使用新参数重新运行函数。这就是我在这里要模仿的。