Код
private SomeClass<Integer> someClass;
someClass = EasyMock.createMock(SomeClass.class);
дает мне предупреждение "Тип безопасности: выражение типа SomeClass требует необработанного преобразования, чтобы соответствовать SomeClass <Integer> ".
Код
private SomeClass<Integer> someClass;
someClass = EasyMock.createMock(SomeClass.class);
дает мне предупреждение "Тип безопасности: выражение типа SomeClass требует необработанного преобразования, чтобы соответствовать SomeClass <Integer> ".
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
}
Я работал над этой проблемой, введя подкласс, например
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")
. Я согласен, что это какой-то хак, но, на мой взгляд, это приемлемо для тестового кода.
@Test
@SuppressWarnings("unchecked")
public void someTest() {
SomeClass<Integer> someClass = EasyMock.createMock(SomeClass.class);
}
Я знаю, что это противоречит вопросу, но почему бы не создать список, а не список Mock?
Это меньше кода и проще работать, например, если вы хотите добавить элементы в список.
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);