コード
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);
2 つの明白なルートは、警告を抑制するか、サブクラスをモックすることです。
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);
}
これが質問に反することはわかっていますが、モック リストではなくリストを作成してみませんか?
たとえば、リストにアイテムを追加する場合など、コードが少なくなり、操作が簡単になります。
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);