2017-11-06 19 views
1

私はMockito 1.10.19を使ってメソッド呼び出しをテストしています。私はMockitoがメソッドの引数any()と一致しません

public class Argument { 
    public D execute(B b){ 
    return new D(); 
    } 
} 
class A extends B { 
} 
class B { 
} 
class C extends B { 
} 
class D {} 

テスト

public class ArgumentTest { 
    @Test 
    public void execute() throws Exception { 
    Argument argument = mock(Argument.class); 
    A a = mock(A.class); 
    D d = mock(D.class); 
    when(argument.execute(any(A.class))).thenAnswer(
     (invocation) -> { 
      Object[] args = invocation.getArguments(); 
      Object mock = invocation.getMock(); 
      return d; 
     } 
    ); 

    argument.execute(new C()); 
    } 

} 

私はこのテストを実行すると、それも引数any(A.class)場合whenマッチャーに一致するexecuteメソッドを呼び出すいくつかのクラスを持っています。

どうしたのですか?

答えて

1

any(...)には型チェックがありません - sourceは:

あらゆるタイプのチェックを行いませんこの方法は、それはあなたのコードでキャストを避けるためにだけ存在しています。ただし、これは将来のメジャーリリースで変更される可能性があります(型チェックが追加される可能性があります)。ソースコードに

クイック一目でマッチングがの引数のいずれかの種類を成功し、クラス・パラメータは、デフォルトの戻り値を生成するために使用されていることを私たちに示しています。

​​

また、テストするハードパラメータの等しい数(ER)とメソッドのオーバーロードを行うことができます。 それは明らかにinstanceofチェックをしているargThatマッチャーで回避できます。

+0

引用用 –

関連する問題