Kev*_*ong 43 java generics easymock mocking
代码
private SomeClass<Integer> someClass;
someClass = EasyMock.createMock(SomeClass.class);
Run Code Online (Sandbox Code Playgroud)
给我一个警告"类型安全:SomeClass类型的表达式需要未经检查的转换以符合SomeClass <Integer>".
Bar*_*end 41
AFAIK,当涉及类名文字时,您无法避免未经检查的警告,并且SuppressWarnings
注释是处理此问题的唯一方法.
请注意,尽可能缩小SuppressWarnings
注释范围是一种很好的形式.您可以将此批注应用于单个局部变量赋值:
public void testSomething() {
@SuppressWarnings("unchecked")
Foo<Integer> foo = EasyMock.createMock(Foo.class);
// Rest of test method may still expose other warnings
}
Run Code Online (Sandbox Code Playgroud)
或使用辅助方法:
@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
}
Run Code Online (Sandbox Code Playgroud)
小智 12
我通过引入子类来解决这个问题,例如
private abstract class MySpecialString implements MySpecial<String>{};
Run Code Online (Sandbox Code Playgroud)
然后创建一个抽象类的模拟:
MySpecial<String> myMock = createControl().createMock(MySpecialString.class);
Run Code Online (Sandbox Code Playgroud)
两个明显的途径是抑制警告或模拟子类。
private static class SomeClass_Integer extends SomeClass<Integer>();
private SomeClass<Integer> someClass;
...
someClass = EasyMock.createMock(SomeClass_Integer.class);
Run Code Online (Sandbox Code Playgroud)
(免责声明:我什至没有尝试编译此代码,也没有使用 EasyMock。)
归档时间: |
|
查看次数: |
25967 次 |
最近记录: |