max*_*max 5 python testing unit-testing regression-testing python-3.x
我有一个小的命令行应用程序(约6k行).它没有单元测试,因为我不知道怎么写它们; 但我现在追溯性地添加一些.我读了这个教程但是我对如何使用这个模块测试整个应用程序感到困惑; 事实上,我甚至不确定我想要做什么被称为"单元测试".
具体来说,如果我使用某些参数运行我的应用程序,它应该生成某些输出文件.我想确保那些输出文件不变.
即,我的应用程序的以下命令行调用:
main.py config1.txt 100 15
main.py config2.txt def 10 qa
etc.....
Run Code Online (Sandbox Code Playgroud)
创建一些小的输出文本文件(每个<10 MB)并将它们放入单个文件夹(每次调用一个),命名如下:
output/config1.100.15.201202011733/
output/config2.def.10.qa.201202011733/
etc...
Run Code Online (Sandbox Code Playgroud)
每个文件夹包含一些小文本文件(每个<10MB).每次迭代代码更改后,我都想用几十个命令行参数运行我的应用程序,并注意输出文件不同的任何情况.(理想情况下,我想做更多的事情;例如,对于某些输出文件,将它们作为带有特定主键的制表符分隔表进行比较,这样如果行顺序改变,它们仍将评估为相等;但这不是危急).
设置它的好方法是什么?
S.L*_*ott 12
步骤1.将您的应用分成两部分.
使用optparse(或argparse)解析命令行选项的部分.
做实际工作的那件作品.
然后,您的"主"脚本执行第1部分以获取所有选项并调用第2部分来完成实际工作.
这被称为"可测试性设计",是单元测试中更重要的部分.
步骤2.一旦你有两件,测试完成实际工作的部分.
编写单元测试脚本 from the_app import the_function_or_class_that_does_real_work
测试功能或类或任何真正的工作.
class Test_With_File( TestCase ):
def assertFileMatches( self, expected, actual, error=None ):
# use difflib or whatever to compare the two files.
class TestMain_Sample_File1( Test_With_File ):
def test_should_produce_known_output( self ):
with open("temp","w") as target:
the_function_that_does_real_work( 'config1.txt', arg2=100, arg3=15, out=target )
self.assertFileMatches( "output/config1.100.15.201202011733", "temp" )
Run Code Online (Sandbox Code Playgroud)
您可以在"TestMain_Sample_File1"类上编写变体,以涵盖您觉得有趣的测试用例.
| 归档时间: |
|
| 查看次数: |
3163 次 |
| 最近记录: |