java吧 关注:1,255,204贴子:12,744,574

单元测试一般怎么写

只看楼主收藏回复

以前没写过,今天试了一下
一个方法有好多逻辑,我都把一块块逻辑写成私有方法了,可是私有方法不能直接测试,直接测试整个方法的话感觉逻辑较多要整体考虑各种情况挺麻烦的
然后依赖的其他bean还要用mock去模拟调用的返回也好麻烦


IP属地:浙江来自Android客户端1楼2024-07-19 18:59回复
    ?方法不是为了实现功能么


    IP属地:辽宁来自Android客户端2楼2024-07-19 21:09
    回复
      同问


      IP属地:广东来自Android客户端3楼2024-07-19 21:12
      回复
        私有方法就反射去调


        IP属地:广东来自iPhone客户端4楼2024-07-19 21:13
        收起回复
          现在ai可以自动智能分析你的业务代码并生成单元测试代码,负责走到每个逻辑分支覆盖每一种业务条件场景。
          如果自己手写,怎么样都要耗费可观的时间。
          但私有方法不是造成障碍的问题,用反射 set visibility 就能调用。


          IP属地:江苏来自iPhone客户端5楼2024-07-19 22:41
          收起回复
            就从public一步步写到private,如果private实在太复杂就反射进去跑。反正单测就是为了覆盖率的无用功


            IP属地:重庆来自Android客户端6楼2024-07-20 00:17
            回复
              然后你发现不但方法不好调,service注入全靠@resource,想test只能起spring boot,想打桩?可有得折腾了


              IP属地:安徽来自Android客户端7楼2024-07-20 00:18
              回复
                更不说那些动不动几百行的SQL,全塞XML里,测?


                IP属地:安徽来自Android客户端8楼2024-07-20 00:19
                回复
                  tdd就好测了


                  IP属地:广东9楼2024-07-20 01:09
                  回复
                    用powermockito,bean对象,根据入参mock返回,私有方法都可以mock


                    IP属地:北京来自iPhone客户端10楼2024-07-20 08:43
                    回复
                      mock会用了就很简单,写到最后也就是组装不同的参数。静态方法 私有方法都可以movk,方法里面调静态方法 私有方法也都可以,用mock的spy。


                      IP属地:陕西来自Android客户端11楼2024-07-20 09:31
                      回复
                        一般不写


                        IP属地:天津来自Android客户端12楼2024-07-20 10:03
                        回复
                          私有方法可以测试,你用反射就可以了,只是mockito不让mock而已(因为原则上私有方法没必要测试)


                          IP属地:广东来自Android客户端13楼2024-07-20 10:13
                          收起回复
                            用powermockito可以测私有方法


                            IP属地:上海来自Android客户端14楼2024-07-20 10:22
                            回复
                              Spring有测试反射的Util,叫Reflect…Util


                              IP属地:上海来自iPhone客户端15楼2024-07-20 11:36
                              回复