代码
private SomeClass<Integer> someClass;
someClass = EasyMock.createMock(SomeClass.class);
给我一个警告 "类型安全:SomeClass的表达式需要未经检查的转换以符合SomeClass<Integer>。"
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
}
我通过引入一个子类来解决这个问题,例如:
private abstract class MySpecialString implements MySpecial<String>{};
然后创建该抽象类的模拟对象:
MySpecial<String> myMock = createControl().createMock(MySpecialString.class);
private static class SomeClass_Integer extends SomeClass<Integer>();
private SomeClass<Integer> someClass;
...
someClass = EasyMock.createMock(SomeClass_Integer.class);
(免责声明:我甚至没有尝试编译此代码,也没有使用过EasyMock。)
@SuppressWarnings("unchecked")
进行注释。我认为这有点像一种hack,但在我的看法中,它在测试代码中是可以接受的。@Test
@SuppressWarnings("unchecked")
public void someTest() {
SomeClass<Integer> someClass = EasyMock.createMock(SomeClass.class);
}
MyItem myItem = createMock(myItem.class);
List<MyItem> myItemList = new ArrayList<MyItem>();
myItemList.add(myItem);
MyItem myItem = createMock(myItem.class);
@SuppressWarnings("unchecked")
List<MyItem> myItemList = createMock(ArrayList.class);
expect(myItemList.get(0)).andReturn(myItem);
replay(myItemList);
org.easymock.classextension.EasyMock
版本的 EasyMock 来创建模拟对象。 - Andreasorg.easymock.classextension
中的类已被弃用,并且仅是指向org.easymock
中同名类的简单代理。建议从导入中删除“.classextension”,并停止使用classextension库进行编译。 - AndrewF