Python单元测试在测试用例

时间:2017-02-08 16:53:12

标签: python unit-testing testing test-suite

我对单元测试一般都很陌生,我试图为我在Python中开发的脚本生成单元测试。该脚本旨在接收数据文件和多个命令行参数,然后在更新数据库时按顺序运行多个函数。例如,以下是我的脚本的运行方式:

import argparse
if __name__ == "__main__": 
    parser = argparse.ArgumentParser(description='Script to process data files')
    parser.add_argument('-f', help='The absolute file_path to the source file')
    args = parser.parse_args()
    main(args)

def main(args):
    file_info = get_file_info(args)
    process1(args, file_info)
    process2(args, file_info)

def file_info(args):
    file_info = {'path':args.file_path...}
    ...
    return file_info

def process1(args):
    #update database1
    ...

def process2(args):
    #update database2
    ...

正如您所看到的,process1和process2旨在修改数据库,而不是返回值,因此检查这些是否正常工作的唯一方法是检查数据库以查看它是否具有正确的值。我可以在单元测试中轻松完成这项工作,但我希望在对main函数的单独调用中运行类似的单元测试。所以我希望我的单元测试看起来像这样:

import unittest
import myScript

class Test_Load(unittest.TestCase):        
    test_args_1 = ['-f','C:\file1.txt']
    myScript.main(test_args_1)

    def test_get_file_info_1(self):
        test_file_info = {'foo':'bar'}
        self.assertDictEqual(test_file_info, myScript.get_file_info(test_args_1))

    def test_process1_1(self):
        #get list from sql query on database
        test_db_info = {'load_time':'1997-07-16T19:20:30', 'file_size':512}
        self.assertDictEqual(test_db_info, sql_query)

    def test_process2_1(self):
        #get list from sql query on database
        test_db_info = {'foo':'bar'}
        self.assertDictEqual(test_db_info, sql_query)

    test_args_2 = ['-f','C:\file2.txt']
    myScript.main(test_args_2)

    def test_get_file_info_2(self):
        test_file_info = {'foo':'bar'}
        self.assertDictEqual(test_file_info, myScript.get_file_info(test_args_2))

    def test_process1_2(self):
        #get list from sql query on database
        test_db_info = {'load_time':'2017-02-08T12:00:00', 'file_size':1024}
        self.assertDictEqual(test_db_info, sql_query)

    def test_process2_2(self):
        #get list from sql query on database
        test_db_info = {'foo':'foobar'}
        self.assertDictEqual(test_db_info, sql_query)
    ...

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

get_file_info()函数返回一个字典,所以我应该没有问题测试。

所以我想调用我的脚本的主要部分,然后对预期的结果进行一些测试。我可以在Test_Load类中像我这样调用我的脚本吗?是否有更好的方法对这些单元测试进行分组,以便它们可以彼此独立运行?

0 个答案:

没有答案
相关问题