Python 蛋疼的单元测试 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
clarkchen
V2EX    pytest

Python 蛋疼的单元测试

  •  
  •   clarkchen 2016-11-06 12:01:51 +08:00 9713 次点击
    这是一个创建于 3261 天前的主题,其中的信息可能已经有所发展或是发生改变。

    平常主要是依靠 Python(PyCharm) + Java(Intellij)做开发

    对于某一个用户自定义的方法都可以通过 Navigate->Test 来创建单测

    用 Intellij 的 Maven 框架的话,创建单元测试非常舒服,自动会在对应的 test 目录下面建立相应的文件

    例如 src/main/java/abc/run.java 对应的测试文件是 test/java/abc/runTest.java

    但是 Pycharm 就蛋了,同样自动创建单元测试,其目录结构直接就是在相同目录下创建 例如在 src 目录下 src/abc/run.py 自动创建的文件位置 src/abc/test_run.py

    巨丑,,

    目前我是手动集中到一个新建的 test 目录下,尽量模仿 Maven 格式,但总觉的路子有点野

    不知道有木有 Python 大神,知道正规 or 人性化 的 Python 单测方法

    14 条回复    2016-11-06 15:10:05 +08:00
    ty89
        1
    ty89  
       2016-11-06 12:11:41 +08:00
    不同的语言其设计的哲学不相同,因此会造成一些使用习惯上的差别,而 python 比较灵活,除了编码规范等大家有一些共识之外,还是有很多地方是需要开发者自己来考虑的。

    我个人的看法是,暂时先不用太在意这些细节,先将你的功能开发完成,把测试跑通,再和你的小伙伴一起讨论出一套自己的风格,然后遵循它并不断完善改进之。
    ldbC5uTBj11yaeh5
        2
    ldbC5uTBj11yaeh5  
       2016-11-06 12:15:52 +08:00
    nose
    yangtukun1412
        3
    yangtukun1412  
       2016-11-06 12:16:01 +08:00 via Android
    建到同一目录下是 PyCharm 的锅吧, 和 Python 有什么关系…
    neoblackcap
        4
    neoblackcap  
       2016-11-06 12:18:04 +08:00
    请使用 pytest
    不过这个框架是很 pythonic 的,你若是习惯写 Java 可能不不习惯它。不过你说的事情,跟语音无关跟测试框架以及配置有关
    clarkchen
        5
    clarkchen  
    OP
       2016-11-06 12:21:11 +08:00
    @yangtukun1412 是这样的,跟 Python 没啥关系,,这个问题应该描述为
    更好的 Pycharm 插件,,或者是 高效的单元测试的 目录结构。。。
    clarkchen
        6
    clarkchen  
    OP
       2016-11-06 12:34:49 +08:00
    @jigloo , @neoblackcap , nose , pytest or unitest 都是测试的一些框架,从 Python Integrated Tools 中就能自己选择不同的框架,效果是一样的。

    这里描述的问题,,自动创建的时候都是在同一级目录中创建。。。
    所以想请假的是 一个合理的 Python 单元测试目录结构。。。
    latyas
        7
    latyas  
       2016-11-06 12:35:18 +08:00
    pytest 是 python 做 unittest 的首选框架,以及,你用 pycharm 创建 unittest 的方式错了, tests 目录需要自己建,单元测试的文件放在这个目录下,命名 test_UNIT.py
    neoblackcap
        8
    neoblackcap  
       2016-11-06 12:46:45 +08:00
    @clarkchen 没有什么合理不合理,你认为效果都是一样的那是你没有去了解他们,我自己写测试就是放在根目录下面的一个 tests 文件夹里的。所以我就说跟配置相关嘛。
    nkssai
        9
    nkssai  
       2016-11-06 13:11:10 +08:00
    =。= Python 单测的习惯就是不像 Java 那样连都一定要一一对应吧,你看 requests 、 django 、 httpie 不都是主目录下一个 test ,里面的结构和项目代码的组织结构也不是一样对应的,更像是按照功能划分的。毕竟语言的组织结构就不一样。
    yidinghe
        10
    yidinghe  
       2016-11-06 13:17:05 +08:00 via Android
    你就想,单元测试也是代码的一部分,就好了
    WangYanjie
        11
    WangYanjie  
       2016-11-06 13:27:18 +08:00
    这锅 python 该接吗?急,在线等
    clarkchen
        12
    clarkchen  
    OP
       2016-11-06 13:55:08 +08:00
    @nkssai, @latyas , @neoblackcap

    说的有道理~~

    Github 里面的成型项目,,,的确就是这么搞的,, 根目录下建立一个 tests

    然后按照 test_UNIT.py 这种格式来命名,如果代码量较多则根据功能建立些子文件夹,应该就是这个样子
    wyntergreg
        13
    wyntergreg  
       2016-11-06 14:32:20 +08:00
    玩 python















    要你妹单元测试
    janxin
        14
    janxin  
       2016-11-06 15:10:05 +08:00
    看来就我一个人是这么写测试的吗....
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1595 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 16:24 PVG 00:24 LAX 09:24 JFK 12:24
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86