43

コード

private SomeClass<Integer> someClass;
someClass = EasyMock.createMock(SomeClass.class);

「型の安全性: SomeClass 型の式は、SomeClass<Integer> に準拠するために未チェックの変換が必要です」という警告が表示されます。

4

5 に答える 5

41

私の知る限り、クラス名リテラルが関係している場合、チェックされていない警告を回避することはできません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
}
于 2008-12-28T12:10:13.913 に答える
12

サブクラスを導入することでこの問題を回避しました。

private abstract class MySpecialString implements MySpecial<String>{};

次に、その抽象クラスのモックを作成します。

MySpecial<String> myMock = createControl().createMock(MySpecialString.class);
于 2012-01-17T15:22:42.237 に答える
3

2 つの明白なルートは、警告を抑制するか、サブクラスをモックすることです。

private static class SomeClass_Integer extends SomeClass<Integer>();
private SomeClass<Integer> someClass;
...
    someClass = EasyMock.createMock(SomeClass_Integer.class);

(免責事項: このコードをコンパイルしようとしたことも、EasyMock を使用したこともありません。)

于 2008-09-11T16:06:20.583 に答える
2

でテスト メソッドに注釈を付けることができます@SuppressWarnings("unchecked")。これはハックのようなものであることに同意しますが、私の意見では、テスト コードでは許容されます。

@Test
@SuppressWarnings("unchecked")
public void someTest() {
    SomeClass<Integer> someClass = EasyMock.createMock(SomeClass.class);
}
于 2008-09-11T18:12:50.187 に答える
1

これが質問に反することはわかっていますが、モック リストではなくリストを作成してみませんか?

たとえば、リストにアイテムを追加する場合など、コードが少なくなり、操作が簡単になります。

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);
于 2013-12-06T15:21:53.077 に答える