3

私は列挙型をモックしようとしています:

public enum SomeEnum implements BaseEnum{

    SOME_VALUE("Description", SomeClass.class);

    private Class<? extends IConsignador> integracao;
    private String descricao;

    TipoIntegracao(String descricao, Class<? extends IConsignador> integracao){
        this.descricao = descricao;
        this.integracao = integracao;
    }

    @Override 
    public String getDescricao() {
        return descricao;
    }

    public Class<? extends IConsignador> getIntegracao() {
        return integracao;
    }
}

そして私のモック:

SomeEnum mock = createMock(SomeEnum.class);
expect(mock.getIntegracao()).andReturn( (Class<? extends IConsignador>) eq(ClassWithOutPublicConstructor.class ) );
replay(mock);

しかし日食は言う:

The method andReturn(Class<capture#1-of ? extends IConsignador>) in the type IExpectationSetters<Class<capture#1-of ? extends IConsignador>> is not applicable for the arguments (Class<capture#2-of ? extends IConsignador>)

彼はキャストを提案しましたが、それでも値を受け入れません。それは何でしょうか?

4

1 に答える 1

11

モックするのが難しい他のものと同様に、Enum からインターフェイスを抽出し、インターフェイスを直接モックすることを検討してください。Enum のモックは、Enum の静的メソッドとインスタンス メソッドの一般的な契約を破るため、悪い考えです (例:ordinal()values())。

EasyMock の観点から言えば、EasyMock は限定されたワイルドカードに問題があるようです。この構文を使用してみてください:

EasyMock.<Class<? extends IConsignador>>expect(
    mock.getIntegracao())
    .andReturn(ClassWithOutPublicConstructor.class);

また、EasyMock が嫌う を に残しeqました。マッチャーは、のパラメーターthenReturn内でのみ使用できます。expect申し訳ありませんが、私は前にそれを見ませんでした。

于 2013-01-23T03:32:30.740 に答える