1

以下のメソッドを JMock でモックしようとしていますが、コンパイラ エラーが発生しています。

モックするクラス:

public interface myClass<T extends SomeClass>{
public void myMethod(T parameter);
public void myOtherMethod();
}

モックの期待値:

exactly(1).of(myClassMocked).myOtherMethod();
exactly(1).of(myClassMocked).myMethod( with(any(SomeClass.class)) );

コンパイル エラー:

型 myClass のメソッド myMethod(capture#6-of ?) は、引数 (SomeClass) には適用されません。

Object.class を他の互換性のあるクラスに切り替えて、マッチャーをいじってみました。

メソッドのシグネチャを単純に変更することはできません。それは簡単すぎるでしょう。

要するに、この特定のメソッド呼び出しを無視したいのですが、テスト メソッドの他のタスクに使用しているサービスであるため、MyClass モック全体を無視することはできません。

編集: 修正は final myClass<?> myClassMocked= mockery.mock(myClass.class); (Eclipseによって提案された一般的な仕様) を変更することですfinal myClass<SomeClass> myClassMocked= mockery.mock(myClass.class);

4

1 に答える 1

0

T を使用してインターフェイスをパラメーター化するということは、コンパイル時に型を定義する必要があることを意味します。問題は、を取得する方法にあります。myClassMockedそのため、「任意の」ワイルドカードが必要?です。

たとえば、次のようmyClassなタイプでパラメータ化されたインターフェイスのサブクラスをモックする必要があります。extends SomeClass

public class myClassImpl implements myClass<SomeSubclassOfSomeClass>{
    public void myMethod(SomeSubclassOfSomeClass parameter){...}
    public void myOtherMethod(){...}
}
于 2013-07-02T22:36:52.470 に答える