最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java編程中void方法的學習教程

 更新時間:2015年10月23日 15:07:50   投稿:goldensun  
這篇文章主要介紹了Java編程中void方法的學習教程,包括對void方法進行單元測試,需要的朋友可以參考下

void 關(guān)鍵字
本節(jié)說明如何聲明和調(diào)用一個void方法。
下面的例子聲明了一個名為printGrade的方法,并且調(diào)用它來打印給定的分數(shù)。
示例

public class TestVoidMethod {

  public static void main(String[] args) {
   printGrade(78.5);
  }

  public static void printGrade(double score) {
   if (score >= 90.0) {
     System.out.println('A');
   }
   else if (score >= 80.0) {
     System.out.println('B');
   }
   else if (score >= 70.0) {
     System.out.println('C');
   }
   else if (score >= 60.0) {
     System.out.println('D');
   }
   else {
     System.out.println('F');
   }
  }
}

以上實例編譯運行結(jié)果如下:

C

這里printGrade方法是一個void類型方法,它不返回值。
一個void方法的調(diào)用一定是一個語句。 所以,它被在main方法第三行以語句形式調(diào)用。就像任何以分號結(jié)束的語句一樣。

單測void類型的方法
Java的Sevice層會有很多void類型的方法,比如save*、update*,這類方法只是做一些更新,不會有返回值,其單測不能根據(jù)方法的返回值來編寫,只能采用特殊方法;

本方法環(huán)境:Mockito、testng

被測試的方法:

想要被測試的VOID方法

@Override
  public void updateRuleName(Long ruleId, String newRuleName, Long ucId) {
    Assert.notNull(ruleId, "規(guī)則ID不能為Null");
    Assert.notNull(newRuleName, "規(guī)則名稱不能為Null");
    Assert.notNull(ucId, "操作人的UCID不能為Null");
    
    String cleanNewRuleName = StringUtils.trim(newRuleName);
    if (StringUtils.isBlank(cleanNewRuleName)) {
      throw new IllegalArgumentException("新的規(guī)則名稱不能為空");
    }
    
    // 查詢規(guī)則對象
    Rule rule = queryRuleById(ruleId);
    if (null == rule) {
      throw new IllegalDataException("沒有查到該規(guī)則");
    }
    
    rule.setRuleId(ruleId);
    rule.setRuleName(cleanNewRuleName);
    rule.setUpdateUcid(ucId);
    rule.setUpdateTime(new Date());
    
    ruleDao.updateSelective(rule);
  }

測試的方法:

void返回的方法測試

@Test
  public void testUpdateRuleName() {
    Long ruleId = 1L;
    String newRuleName = "newRuleName";
    Long ucId = 123L;
    
    List<Rule> rules = new ArrayList<Rule>();
    Rule rule = new Rule();
    rule.setRuleStatus((byte) DBValueSetting.RULE_STATUS_TAKE_EFFECT);
    rules.add(rule);
    
    // 查詢規(guī)則對象
    Map<String, Object> params = new HashMap<String, Object>();
    params.put("ruleId", ruleId);
    Mockito.when(ruleDao.queryRulesByCondition(params)).thenReturn(rules);
    
    Mockito.doAnswer(new Answer<Object>() {
      public Object answer(InvocationOnMock invocation) {
        // 斷點2:這里隨后執(zhí)行
        Rule rule = (Rule) invocation.getArguments()[0];
        Assert.assertTrue(rule.getRuleName().equals("newRuleName"));
        return null;
      }
    }).when(ruleDao).updateSelective(Mockito.any(Rule.class));
    
    // 斷點1:先執(zhí)行到這里
    ruleService.updateRuleName(ruleId, newRuleName, ucId);
  }

如注釋所示,如果加了兩個斷點的話,執(zhí)行的過程中,會先執(zhí)行最后的調(diào)用行,端點1執(zhí)行的過程中,會執(zhí)行到端點2的stub,這時候在斷點2可以獲取到方法執(zhí)行的入?yún)?,對入?yún)⑦M行Assert校驗,即可實現(xiàn)目的;

new Anwer是個接口,其中只有一個方法,用于設(shè)置方法調(diào)用的代理執(zhí)行入口

doAnswer的實現(xiàn)

public interface Answer<T> {
  /**
   * @param invocation the invocation on the mock.
   *
   * @return the value to be returned
   *
   * @throws Throwable the throwable to be thrown
   */
  T answer(InvocationOnMock invocation) throws Throwable;
}

當代碼執(zhí)行到“ruleDao.updateSelective(rule);”的時候,會觸發(fā)針對mock對象調(diào)用的攔截器,在攔截器中,會創(chuàng)建一個動態(tài)代理,動態(tài)代理的invocation就是new Answer中覆蓋的方法;

使用攔截、代理兩種方法,實現(xiàn)了對mock對象方法的入?yún)ⅰ⒊鰠⒌脑O(shè)定和獲取,使用這種方式,就可以校驗VOID方法內(nèi)部的執(zhí)行類調(diào)用的情況。

相關(guān)文章

  • Java數(shù)據(jù)結(jié)構(gòu)之實現(xiàn)跳表

    Java數(shù)據(jù)結(jié)構(gòu)之實現(xiàn)跳表

    今天帶大家來學習Java數(shù)據(jù)結(jié)構(gòu)的相關(guān)知識,文中對用Java實現(xiàn)跳表作了非常詳細的圖文解說及代碼示例,對正在學習java的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-05-05
  • Java中ArrayList在foreach里remove的問題詳析

    Java中ArrayList在foreach里remove的問題詳析

    這篇文章主要給大家介紹了關(guān)于Java中ArrayList在foreach里remove問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起看看吧
    2018-09-09
  • java?線程池如何執(zhí)行策略又拒絕哪些策略

    java?線程池如何執(zhí)行策略又拒絕哪些策略

    這篇文章主要介紹了java?線程池如何執(zhí)行策略又拒絕哪些策略,文章通過線程池的執(zhí)行方法?execute()?展開全篇內(nèi)容,需要的小伙伴可以參考一下
    2022-05-05
  • 詳解Java中的do...while循環(huán)語句的使用方法

    詳解Java中的do...while循環(huán)語句的使用方法

    這篇文章主要介紹了Java中的do...while循環(huán)語句的使用方法,是Java入門學習中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-10-10
  • javaweb實現(xiàn)投票系統(tǒng)

    javaweb實現(xiàn)投票系統(tǒng)

    這篇文章主要為大家詳細介紹了javaweb實現(xiàn)投票系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • IDEA如何修改配置文件的存放位置

    IDEA如何修改配置文件的存放位置

    這篇文章主要介紹了IDEA如何修改配置文件的存放位置,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • SpringBoot整合定時任務(wù)的方法

    SpringBoot整合定時任務(wù)的方法

    通過 ThreadPoolExecutor 可以實現(xiàn)各式各樣的自定義線程池,而 ScheduledThreadPoolExecutor 類則在自定義線程池的基礎(chǔ)上增加了周期性執(zhí)行任務(wù)的功能,這篇文章主要介紹了SpringBoot整合定時任務(wù),需要的朋友可以參考下
    2024-05-05
  • Java動態(tài)加載類示例詳解

    Java動態(tài)加載類示例詳解

    這篇文章主要給大家介紹了關(guān)于Java動態(tài)加載類的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-02-02
  • spring-boot集成spring-security的oauth2實現(xiàn)github登錄網(wǎng)站的示例

    spring-boot集成spring-security的oauth2實現(xiàn)github登錄網(wǎng)站的示例

    本篇文章主要介紹了spring-boot集成spring-security的oauth2實現(xiàn)github登錄網(wǎng)站的示例,非常具有實用價值,需要的朋友可以參考下
    2017-10-10
  • java聯(lián)調(diào)生成測試數(shù)據(jù)工具類方式

    java聯(lián)調(diào)生成測試數(shù)據(jù)工具類方式

    這篇文章主要介紹了java聯(lián)調(diào)生成測試數(shù)據(jù)工具類方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03

最新評論

海丰县| 南城县| 肥西县| 探索| 文水县| 福泉市| 道孚县| 泸州市| 吉林省| 广安市| 平乡县| 太谷县| 平泉县| 张掖市| 和林格尔县| 陆良县| 广灵县| 安国市| 泌阳县| 施甸县| 佛坪县| 龙州县| 谢通门县| 利津县| 泽州县| 灵丘县| 波密县| 吉木萨尔县| 信丰县| 新乐市| 仁怀市| 新泰市| 阳城县| 佛山市| 满洲里市| 宽城| 兴文县| 河北省| 景德镇市| 辛集市| 巩义市|