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 サイトに注目してください。