ホームページ >Java >&#&チュートリアル >Javaプログラミングのvoidメソッドの学習チュートリアル

Javaプログラミングのvoidメソッドの学習チュートリアル

高洛峰
高洛峰オリジナル
2017-01-22 10:11:391850ブラウズ

void キーワード
このセクションでは、void メソッドを宣言して呼び出す方法について説明します。
次の例では、printGrade というメソッドを宣言し、それを呼び出して指定されたスコアを出力します。

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');
   }
  }
}

上記例のコンパイル結果と実行結果は以下のとおりです。

C

ここでのprintGradeメソッドはvoid型のメソッドであり、値を返しません。
void メソッドの呼び出しはステートメントである必要があります。 したがって、main メソッドの 3 行目のステートメントとして呼び出されます。セミコロンで終わるステートメントと同様です。

void 型メソッドの単一テスト
Java のサービス層には、save* や update* などの多くの void 型メソッドがあり、これらのメソッドは一部の更新を行うだけであり、戻り値に基づく単一のテストはできません。メソッドの値。値は特別なメソッドを使用してのみ書き込むことができます。

このメソッド環境: Mockito、testng

テスト対象メソッド:

テスト対象の VOID メソッド

@Override
  public void updateRuleName(Long ruleId, String newRuleName, Long ucId) {
    Assert.notNull(ruleId, "规则ID不能为Null");
    Assert.notNull(newRuleName, "规则名称不能为Null");
    Assert.notNull(ucId, "操作人的UCID不能为Null");
     
    String cleanNewRuleName = StringUtils.trim(newRuleName);
    if (StringUtils.isBlank(cleanNewRuleName)) {
      throw new IllegalArgumentException("新的规则名称不能为空");
    }
     
    // 查询规则对象
    Rule rule = queryRuleById(ruleId);
    if (null == rule) {
      throw new IllegalDataException("没有查到该规则");
    }
     
    rule.setRuleId(ruleId);
    rule.setRuleName(cleanNewRuleName);
    rule.setUpdateUcid(ucId);
    rule.setUpdateTime(new Date());
     
    ruleDao.updateSelective(rule);
  }

void から返されたメソッド Test

@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);
     
    // 查询规则对象
    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:这里随后执行
        Rule rule = (Rule) invocation.getArguments()[0];
        Assert.assertTrue(rule.getRuleName().equals("newRuleName"));
        return null;
      }
    }).when(ruleDao).updateSelective(Mockito.any(Rule.class));
     
    // 断点1:先执行到这里
    ruleService.updateRuleName(ruleId, newRuleName, ucId);
  }

コメントに示されているように、2 つのブレークポイントが追加された場合、エンドポイント 1 の実行中に最後の呼び出し行が最初に実行され、この時点でエンドポイント 2 のスタブが実行されます。ブレークポイント 2 では、メソッド実行の入力パラメーターを取得し、目的を達成するために入力パラメーターに対してアサート検証を実行できます。

new Anwer は、プロキシを設定するために使用されるメソッドを 1 つだけ持つインターフェイスです。メソッド呼び出しの実行エントリ

doAnswer実装

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;
}

「ruleDao.updateSelective(rule);」のコードを実行すると、モックオブジェクトに対して呼び出されるインターセプターがトリガーされ、インターセプター内で動的プロキシがトリガーされます。動的プロキシの呼び出しは、回答で説明されている新しいメソッドです。

モック オブジェクト メソッドの入力パラメータと出力パラメータの設定と取得を実現するために、このメソッドを使用して、実行クラスを検証できます。 VOID Case 内で呼び出します。

Java プログラミングの void メソッドの学習チュートリアルに関連するその他の記事については、PHP 中国語 Web サイトに注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。