不能用mock方法(Class <?extends SomeClass>)

Fal*_*lci 2 java junit easymock

我正在尝试模拟一个枚举:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

我的模仿:

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

但日食说:

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>)
Run Code Online (Sandbox Code Playgroud)

他建议演员,但仍然不接受这个价值.它能是什么?

Jef*_*ica 9

与其他易于模拟的东西一样,考虑从Enum中提取界面并直接模拟界面.模拟枚举是一个坏主意,因为它打破了枚举上的静态和实例方法的一般契约(例如ordinal()values()).

对于EasyMock来说,EasyMock显然在有界通配符方面遇到了一些麻烦.尝试使用以下语法:

EasyMock.<Class<? extends IConsignador>>expect(
    mock.getIntegracao())
    .andReturn(ClassWithOutPublicConstructor.class);
Run Code Online (Sandbox Code Playgroud)

你也留下了一个eq,你的thenReturnEasyMock不喜欢.匹配器仅用于expect参数内.对不起,我以前没见过.