如何使用mockito验证参数化方法

时间:2014-10-20 05:40:51

标签: java junit mockito raw-types

我正在使用mockito进行单元测试。到目前为止,它对我很有用,直到我看到两个警告。我已经检查了mockito的文档,但不知道如何摆脱警告。这是代码。任何提示都非常感谢。

class Foo<E> {
    public void doIt(E entity) {
    }
}

class TestCase1 {
    // Compiler Warning -> Unchecked assignment 'Foo<Bar>' to 'Foo'
    private Foo<Bar> fooMock = mock(Foo.class);
}

class TestCase2 {
    private Foo fooMock = mock(Foo.class);
    @Test
    public testBar() {
        fooMock.doIt(any(Bar.class));
        // Compiler Warning -> Unchecked call to 'doIt(E)' as a member of raw type 'Foo'
        verify(fooMock, times(1)).doIt(any(Bar.class));
    }
}

更新1

我尝试了魔法注释@Mock,警告消失了。

class TestCase3 {
    @Mock
    private Foo<Bar> fooMock;
    @Before
    public void setUp() {
        initMocks(this);
    }
    @Test
    public testBar() {
        fooMock.doIt(any(Bar.class));
        verify(fooMock, times(1)).doIt(any(Bar.class));
    }
}

1 个答案:

答案 0 :(得分:3)

您可以尝试使用Mockito的注释,以避免第一次警告。在第二个中,Matchers允许使用泛型,所以这应该可以正常工作

@RunWith(MockitoJUnitRunner.class)
public class TestCase1 {

    @Mock
    private Foo<Bar> fooMock;

    @Test
    public void testBar() {
        fooMock.doIt(Matchers.<Bar>any());
        Mockito.verify(fooMock, Mockito.times(1)).doIt(Matchers.<Bar>any());
    }
}