無効なキーワード
このセクションでは、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 (スコア >= 80.0) { System.out.println('B') } else if (スコア >= 70.0) { System.out.println('C'); } else if (スコア >= 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 rulesId, String newRuleName, Long ucId) { Assert.notNull(ruleId, "ルール ID を Null にすることはできません"); Assert.notNull(newRuleName, "ルール名を Null にすることはできません"); notNull( ucId, "オペレーターの UCID を Null にすることはできません"); String cleanNewRuleName = StringUtils.trim(newRuleName); if (StringUtils.isBlank(cleanNewRuleName)) { throw new IllegalArgumentException("新しいルール名を空にすることはできません") } // クエリ ルール オブジェクト Rule rules = queryRuleById(ruleId); = ルール) { throw new IllegalDataException("ルールが見つかりませんでした"); }ルール.setRuleId(ruleId); ルール.setRuleName(cleanNewRuleName); ルール.setUpdateTime(new Date());
試験方法:
void 戻りメソッドのテスト
@Test public void testUpdateRuleName() { String newRuleName = "newRuleName" = 123L; リスト<ルール> ルール = new RuleStatus; ((バイト) DBValueSetting.RULE_STATUS_TAKE_EFFECT); //クエリ ルール オブジェクト Map<String, Object> params = new HashMap<String, Object>(); params.put("ruleId", rulesId); .doAnswer(new Answer<Object>() { public Object Answer(InvocationOnMock 呼び出し) { //ブレークポイント 2: ルール rules = (ルール) invocation.getArguments()[0]; Assert.assertTrue(rule.getRuleName().equals("newRuleName")); return null; Mockito.any(Rule.class)); // ブレークポイント 1: ここで最初に実行しますruleService.updateRuleName(ruleId,新しいルール名、ucId);
コメントにあるように、ブレークポイントを 2 つ追加すると、エンドポイント 1 の実行中に最後の呼び出し行が最初に実行され、このときエンドポイント 2 のスタブが実行されます。 . メソッド実行の入力パラメータに移動し、目的を達成するために入力パラメータのアサート検証を実行します。
new Anwer は、メソッド呼び出しのプロキシ実行エントリを設定するために使用されるメソッドを 1 つだけ持つインターフェイスです。
doAnswerの実装
public Interface Answer<T> { /** * @param invocation モックの呼び出し * * @return 返される値 * * @throws Throwable スローされるスロー可能オブジェクト */ T Answer(InvocationOnMock invocation) throws Throwable; }
「ruleDao.updateSelective(rule);」のコードが実行されると、モックオブジェクトに対して呼び出されるインターセプターがトリガーされ、インターセプター内で動的プロキシが作成されます。動的プロキシの呼び出しは、新しいメソッドでカバーされます。答え;
インターセプトおよびプロキシ メソッドを使用して、モック オブジェクト メソッドの入力パラメータと出力パラメータの設定と取得を実現します。このメソッドを使用して、VOID メソッド内の実行クラス呼び出しを検証できます。