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);

eq你还在你的 中留下了一个thenReturnEasyMock 不喜欢的东西。匹配器仅适用于 withinexpect的参数。抱歉我之前没看到。

于 2013-01-23T03:32:30.740 回答