코드EasyMock : 경고없이 제네릭 클래스의 모의를 어떻게 만듭니 까?
private SomeClass<Integer> someClass;
someClass = EasyMock.createMock(SomeClass.class);
나에게 경고 "유형의 안전 : 유형 SomeClass의 발현이 SomeClass < 정수 >에 맞도록 선택하지 않은 변환이 필요합니다"제공합니다.
코드EasyMock : 경고없이 제네릭 클래스의 모의를 어떻게 만듭니 까?
private SomeClass<Integer> someClass;
someClass = EasyMock.createMock(SomeClass.class);
나에게 경고 "유형의 안전 : 유형 SomeClass의 발현이 SomeClass < 정수 >에 맞도록 선택하지 않은 변환이 필요합니다"제공합니다.
명백한 두 경로는 경고를 표시하지 않거나 서브 클래스를 조롱하는 것입니다.
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);
}
네, 그렇지만 저가로 느껴진다. –
만약이 길로 가면 (잘하면 더 좋은 방법이있다) @SuppressWarnings을 변수 할당에 넣는 것보다 훨씬 더 좋다. 방법. – SamBeran
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
}
내가, 예를 들어, 서브 클래스를 도입하여이 문제를 해결하려면 일을 나는이 질문에 반하는 알고 있지만 왜 모의 목록이 아닌 목록을 작성하지
MySpecial<String> myMock = createControl().createMock(MySpecialString.class);
또한 추상 클래스를 사용할 때 모의 객체를 생성하기 위해 EasyMock의'org.easymock.classextension.EasyMock' 버전을 사용하는 것을 잊지 마십시오. – Andreas
EasyMock 3.0 (2010 년 5 월) 현재, org.easymock.classextension의 클래스는''org.easymock''의 같은 이름의 클래스에 대한 단순한 프록시입니다. 가져 오기에서 ".classextension"을 제거하고 classextension 라이브러리를 사용하여 컴파일을 중지하는 것이 좋습니다. – AndrewF
:
private abstract class MySpecialString implements MySpecial<String>{};
그런 다음 그 추상 클래스의 실물 크기의 모형을 만들?
예를 들어 목록에 항목을 추가하려는 경우 코드가 적어 작업하기가 쉽습니다.
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);
의 구문은 아마도해야합니다 : 개인 정적 인터페이스 SomeClass_Integer은 SomeClass 확장 {} 저도 같은 문제를 가지고 내가 그렇게 접근 방식 사용 주위에이 작품입니다 작동합니다. 그러나 나는 누군가가 우리가 찾고있는 대답을 가지기를 바란다. –