EasyMock:如何在没有警告的情况下创建泛型化类的模拟?

2022-09-01 01:05:25

代码

private SomeClass<Integer> someClass;
someClass = EasyMock.createMock(SomeClass.class);

给我一个警告“类型安全:SomeClass类型的表达式需要未经检查的转换才能符合SomeClass<Integer>”。


答案 1

AFAIK,当涉及类名文本时,您无法避免未选中的警告,而注释是处理此问题的唯一方法。SuppressWarnings

请注意,尽可能缩小注释范围是一种很好的形式。您可以将此注释应用于单个局部变量赋值:SuppressWarnings

public void testSomething() {

    @SuppressWarnings("unchecked")
    Foo<Integer> foo = EasyMock.createMock(Foo.class);

    // Rest of test method may still expose other warnings
}

或使用帮助程序方法:

@SuppressWarnings("unchecked")
private static <T> Foo<T> createFooMock() {
    return (Foo<T>)EasyMock.createMock(Foo.class);
}

public void testSomething() {
    Foo<String> foo = createFooMock();

    // Rest of test method may still expose other warnings
}

答案 2

我通过引入一个子类来解决这个问题,例如

private abstract class MySpecialString implements MySpecial<String>{};

然后创建该抽象类的模拟:

MySpecial<String> myMock = createControl().createMock(MySpecialString.class);

推荐