2017-04-04 4 views
0

Javaでのリフレクションを使用して、私は有効にしたいクラス名のarraylistを繰り返し、それらをインスタンス化し、それぞれの中で共通名 'parse(String)'を持つメソッドを呼び出します。Java - 動的にインスタンス化されたメソッドが実行時に呼び出されるかどうかをチェックする方法

for (String parser : enabledParses) 
{ 
    Class<?> parserClass = Class.forname(String.format"%s.%s", parserDirectoryPath, parser)); 
    Method parseMethod = parserClass.getMethod("parse", String.class); 
    Object parserObj = null; 

    switch (parser) 
    { 
     case "parser1" : 
      parserObj = parserClass.getConstructor(ConfigWrapper.class, Alerter.class).newInstance(config, alerter); 
      break; 
    ... 
    ... 
    ... 
    } 
    parseMethod.invoke(pluginObj, stringToParse); 

テスト時に、有効なパーサーごとにparse()メソッドが呼び出されたことを確認するにはどうすればよいですか?

ありがとうございます!

+0

すべてのは、彼らが呼ばれたかどうかを確認する唯一の方法はある、私に教えてください、またはあなたがチェック呼び出しの結果。 –

+0

傷害に侮辱を加えるために、parse()はvoidメソッドです。ご協力いただきありがとうございます。 – notfreshprince

答えて

0

いくつかのメソッドが呼び出されたことを確認したい場合は、Mockitoを使用してからMockito.verify(....)を使用できます。 しかし、あなたの実装が大きすぎるため、このケースではあなたのテストは大きくなるので、分解を改善してください。単純な方法に分割します。例えば :

List<MyInterface> loadAndCreateInstances(File ...) 

void callParse(List<MyInterface> instances) {} 

そしてMockitoを使用および/モックspyedオブジェクト(Collections.singletonList(myMock))のリストを作成します。検証:

Mockito.verify(myMock,times(1)).parse(any()) 

は私が言った場合は、それらが呼び出された記録するために、これらのメソッドにコードを追加した場合:-)

+0

ありがとう、非常に助けて! – notfreshprince

関連する問題