pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

<small id='XvYDz'></small><noframes id='XvYDz'>

  • <tfoot id='XvYDz'></tfoot>

        <bdo id='XvYDz'></bdo><ul id='XvYDz'></ul>
      1. <i id='XvYDz'><tr id='XvYDz'><dt id='XvYDz'><q id='XvYDz'><span id='XvYDz'><b id='XvYDz'><form id='XvYDz'><ins id='XvYDz'></ins><ul id='XvYDz'></ul><sub id='XvYDz'></sub></form><legend id='XvYDz'></legend><bdo id='XvYDz'><pre id='XvYDz'><center id='XvYDz'></center></pre></bdo></b><th id='XvYDz'></th></span></q></dt></tr></i><div class="r5fjfln" id='XvYDz'><tfoot id='XvYDz'></tfoot><dl id='XvYDz'><fieldset id='XvYDz'></fieldset></dl></div>

        <legend id='XvYDz'><style id='XvYDz'><dir id='XvYDz'><q id='XvYDz'></q></dir></style></legend>

        使用 PowerMock 模擬私有方法,但仍會調用底層方法

        Mocked private method with PowerMock, but underlying method still gets called(使用 PowerMock 模擬私有方法,但仍會調用底層方法)
        1. <i id='oIVg0'><tr id='oIVg0'><dt id='oIVg0'><q id='oIVg0'><span id='oIVg0'><b id='oIVg0'><form id='oIVg0'><ins id='oIVg0'></ins><ul id='oIVg0'></ul><sub id='oIVg0'></sub></form><legend id='oIVg0'></legend><bdo id='oIVg0'><pre id='oIVg0'><center id='oIVg0'></center></pre></bdo></b><th id='oIVg0'></th></span></q></dt></tr></i><div class="dhhh7pl" id='oIVg0'><tfoot id='oIVg0'></tfoot><dl id='oIVg0'><fieldset id='oIVg0'></fieldset></dl></div>

              <tbody id='oIVg0'></tbody>
          1. <tfoot id='oIVg0'></tfoot>
            <legend id='oIVg0'><style id='oIVg0'><dir id='oIVg0'><q id='oIVg0'></q></dir></style></legend>

            <small id='oIVg0'></small><noframes id='oIVg0'>

                <bdo id='oIVg0'></bdo><ul id='oIVg0'></ul>

                • 本文介紹了使用 PowerMock 模擬私有方法,但仍會調用底層方法的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

                  問題描述

                  我正在嘗試模擬一個進行 JNDI 調用的私有方法.當從單元測試中調用該方法時,它會引發異常^.我想模擬該方法以進行測試.我使用了 來自另一個問題的示例代碼回答,當測試通過時,似乎仍然調用了底層方法.我在 doTheGamble() 方法中插入了一個 System.err.println(),它被打印到我的控制臺.

                  I am trying to mock out a private method that is making a JNDI call. When that method gets called from a unit test, it throws an exception^. I would like to mock-out that method for testing purposes. I used the sample code from another questions answer, and while the test passes, it seems that the underlying method still gets called. I inserted a System.err.println() in the doTheGamble() method, and it gets printed out to my console.

                  很有趣,如果我注釋掉第一個 assertThat,測試就通過了.?:(

                  Interesting enough, if I comment out the first assertThat, the test passes. ?:(

                  那么,我如何模擬一個私有方法以使其不被調用?

                  So, how do I mock out a private method so that it does not get called?

                  import static org.hamcrest.core.Is.is;
                  import static org.junit.Assert.assertThat;
                  import static org.mockito.Matchers.anyInt;
                  import static org.mockito.Matchers.anyString;
                  import static org.powermock.api.mockito.PowerMockito.when;
                  import static org.powermock.api.support.membermodification.MemberMatcher.method;
                  
                  import java.util.Random;
                  
                  import org.junit.Test;
                  import org.junit.runner.RunWith;
                  import org.powermock.api.mockito.PowerMockito;
                  import org.powermock.core.classloader.annotations.PrepareForTest;
                  import org.powermock.modules.junit4.PowerMockRunner;
                  
                  @RunWith(PowerMockRunner.class)
                  @PrepareForTest(CodeWithPrivateMethod.class)
                  public class PowerMock_Test {
                  
                      static boolean gambleCalled = false; 
                  
                      @Test(expected = RuntimeException.class)
                      public void when_gambling_is_true_then_always_explode() throws Exception {
                          CodeWithPrivateMethod spy = PowerMockito.spy(new CodeWithPrivateMethod());
                  
                          when(spy, method(CodeWithPrivateMethod.class, "doTheGamble", String.class, int.class))
                                  .withArguments(anyString(), anyInt())
                                  .thenReturn(true);
                  
                  /* 1 */ assertThat( PowerMock_Test.gambleCalled, is(false) );
                          spy.meaningfulPublicApi();
                  /* 2 */ assertThat( PowerMock_Test.gambleCalled, is(false) );
                      }
                  }
                  
                  
                  class CodeWithPrivateMethod {
                  
                      public void meaningfulPublicApi() {
                          if (doTheGamble("Whatever", 1 << 3)) {
                              throw new RuntimeException("boom");
                          }
                      }
                  
                      private boolean doTheGamble(String whatever, int binary) {
                          Random random = new Random(System.nanoTime());
                          boolean gamble = random.nextBoolean();
                  
                          System.err.println( "
                  >>> GAMBLE CALLED <<<
                  " );
                          PowerMock_Test.gambleCalled = true;
                  
                          return gamble;
                      }
                  }   
                  

                  ^可以理解,因為我的工作區不支持JNDI,所以只有生產環境支持

                  ^ understandably, since my workspace does not support JNDI, only the production environment does

                  % 我正在使用所有庫的最新版本,JUnit 4.10、Mockito 1.8.5、Hamcrest 1.1、Javassist 3.15.0 和 PowerMock 1.4.10.

                  % I am using the latest versions of all the library, JUnit 4.10, Mockito 1.8.5, Hamcrest 1.1, Javassist 3.15.0, and PowerMock 1.4.10.

                  推薦答案

                  來自 PowerMock 私有方法示例:

                  @RunWith(PowerMockRunner.class)
                  // We prepare PartialMockClass for test because it's final or we need to mock private or static methods
                  @PrepareForTest(PartialMockClass.class)
                  public class YourTestCase {
                  @Test
                  public void privatePartialMockingWithPowerMock() {        
                      PartialMockClass classUnderTest = PowerMockito.spy(new PartialMockClass());
                  
                      // use PowerMockito to set up your expectation
                      PowerMockito.doReturn(value).when(classUnderTest, "methodToMock", "parameter1");
                  
                      // execute your test
                      classUnderTest.execute();
                  
                      // Use PowerMockito.verify() to verify result
                      PowerMockito.verifyPrivate(classUnderTest, times(2)).invoke("methodToMock", "parameter1");
                  }
                  

                  所以要將它應用到您的代碼中,我認為它可能會變成:

                  So to apply this to your code, I think it might become:

                  @RunWith(PowerMockRunner.class)
                  @PrepareForTest(CodeWithPrivateMethod.class)
                  public class PowerMock_Test {
                      @Test(expected = RuntimeException.class)
                      public void when_gambling_is_true_then_always_explode() throws Exception {
                          CodeWithPrivateMethod spy = PowerMockito.spy(new CodeWithPrivateMethod());
                  
                          PowerMockito.doReturn(true).when(spy, "doTheGamble", anyString(), anyInt());
                  
                  
                  /* 1 */ PowerMockito.verifyPrivate(spy, times(0)).invoke("doTheGamble", anyString(), anyInt());            
                          spy.meaningfulPublicApi();
                  /* 2 */ PowerMockito.verifyPrivate(spy, times(2)).invoke("doTheGamble", anyString(), anyInt());            
                      }
                  }
                  

                  我只是在此處的編輯器中編寫了代碼.沒有實際運行任何測試,并且在編寫此代碼時沒有任何錯誤受到損害.

                  I just coded that in the editor here. No tests have actually been run, and no bugs have been harmed in the crafting of this code.

                  這篇關于使用 PowerMock 模擬私有方法,但仍會調用底層方法的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

                  【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

                  相關文檔推薦

                  How can I detect integer overflow on 32 bits int?(如何檢測 32 位 int 上的整數溢出?)
                  Local variables before return statements, does it matter?(return 語句之前的局部變量,這有關系嗎?)
                  How to convert Integer to int?(如何將整數轉換為整數?)
                  How do I create an int array with randomly shuffled numbers in a given range(如何在給定范圍內創建一個隨機打亂數字的 int 數組)
                  Inconsistent behavior on java#39;s ==(java的行為不一致==)
                  Why is Java able to store 0xff000000 as an int?(為什么 Java 能夠將 0xff000000 存儲為 int?)
                    <tbody id='VGO6v'></tbody>

                  <small id='VGO6v'></small><noframes id='VGO6v'>

                • <i id='VGO6v'><tr id='VGO6v'><dt id='VGO6v'><q id='VGO6v'><span id='VGO6v'><b id='VGO6v'><form id='VGO6v'><ins id='VGO6v'></ins><ul id='VGO6v'></ul><sub id='VGO6v'></sub></form><legend id='VGO6v'></legend><bdo id='VGO6v'><pre id='VGO6v'><center id='VGO6v'></center></pre></bdo></b><th id='VGO6v'></th></span></q></dt></tr></i><div class="zhdlt7z" id='VGO6v'><tfoot id='VGO6v'></tfoot><dl id='VGO6v'><fieldset id='VGO6v'></fieldset></dl></div>

                  <tfoot id='VGO6v'></tfoot>

                        <legend id='VGO6v'><style id='VGO6v'><dir id='VGO6v'><q id='VGO6v'></q></dir></style></legend>
                        • <bdo id='VGO6v'></bdo><ul id='VGO6v'></ul>

                            主站蜘蛛池模板: 无线联网门锁|校园联网门锁|学校智能门锁|公租房智能门锁|保障房管理系统-KEENZY中科易安 | 自清洗过滤器-全自动自清洗过反冲洗过滤器 - 中乂(北京)科技有限公司 | 十二星座查询(性格特点分析、星座运势解读) - 玄米星座网 | 医用空气消毒机-医用管路消毒机-工作服消毒柜-成都三康王 | 叉车电池-叉车电瓶-叉车蓄电池-铅酸蓄电池-电动叉车蓄电池生产厂家 | 熔体泵_熔体出料泵_高温熔体泵-郑州海科熔体泵有限公司 | 塑料撕碎机_编织袋撕碎机_废纸撕碎机_生活垃圾撕碎机_废铁破碎机_河南鑫世昌机械制造有限公司 | 挤奶设备过滤纸,牛奶过滤纸,挤奶机过滤袋-济南蓝贝尔工贸有限公司 | 小型气象站_车载气象站_便携气象站-山东风途物联网 | 海德莱电力(HYDELEY)-无功补偿元器件生产厂家-二十年专业从事电力电容器 | 卫生型双针压力表-高温防腐差压表-安徽康泰电气有限公司 | 上海logo设计 | 水厂污泥地磅|污泥处理地磅厂家|地磅无人值守称重系统升级改造|地磅自动称重系统维修-河南成辉电子科技有限公司 | 贵州水玻璃_-贵阳花溪闽兴水玻璃厂 | 楼承板-开闭口楼承板-无锡海逵楼承板 | 防水套管-柔性防水套管-刚性防水套管-上海执品管件有限公司 | 防爆电机_防爆电机型号_河南省南洋防爆电机有限公司 | 风化石头制砂机_方解石制砂机_瓷砖石子制砂机_华盛铭厂家 | 房车价格_依维柯/大通/东风御风/福特全顺/江铃图片_云梯搬家车厂家-程力专用汽车股份有限公司 | 水性漆|墙面漆|木器家具漆|水漆涂料_晨阳水漆官网 | KBX-220倾斜开关|KBW-220P/L跑偏开关|拉绳开关|DHJY-I隔爆打滑开关|溜槽堵塞开关|欠速开关|声光报警器-山东卓信有限公司 | 清水混凝土修复_混凝土色差修复剂_混凝土色差调整剂_清水混凝土色差修复_河南天工 | 学叉车培训|叉车证报名|叉车查询|叉车证怎么考-工程机械培训网 | 优宝-汽车润滑脂-轴承润滑脂-高温齿轮润滑油脂厂家 | SF6环境监测系统-接地环流在线监测装置-瑟恩实业 | 高硼硅玻璃|水位计玻璃板|光学三棱镜-邯郸奥维玻璃科技有限公司 高温高压釜(氢化反应釜)百科 | 中控室大屏幕-上海亿基自动化控制系统工程有限公司 | 衡阳耐适防护科技有限公司——威仕盾焊接防护用品官网/焊工手套/焊接防护服/皮革防护手套 | 电动葫芦|防爆钢丝绳电动葫芦|手拉葫芦-保定大力起重葫芦有限公司 | 数控走心机-走心机价格-双主轴走心机-宝宇百科 | 北京网站建设公司_北京网站制作公司_北京网站设计公司-北京爱品特网站建站公司 | 磁力去毛刺机_去毛刺磁力抛光机_磁力光饰机_磁力滚抛机_精密金属零件去毛刺机厂家-冠古科技 | 北京自然绿环境科技发展有限公司专业生产【洗车机_加油站洗车机-全自动洗车机】 | 企小优-企业数字化转型服务商_网络推广_网络推广公司 | 清管器,管道清管器,聚氨酯发泡球,清管球 - 承德嘉拓设备 | [官网]叛逆孩子管教_戒网瘾学校_全封闭问题青少年素质教育_新起点青少年特训学校 | 东莞市踏板石餐饮管理有限公司_正宗桂林米粉_正宗桂林米粉加盟_桂林米粉加盟费-东莞市棒子桂林米粉 | 昆山PCB加工_SMT贴片_PCB抄板_线路板焊接加工-昆山腾宸电子科技有限公司 | 一航网络-软件测评官网| 一体化净水器_一体化净水设备_一体化水处理设备-江苏旭浩鑫环保科技有限公司 | 青岛侦探调查_青岛侦探事务所_青岛调查事务所_青岛婚外情取证-青岛狄仁杰国际侦探公司 |