Mockito方法无法访问

Ido*_*ash 9 mockito

我用这个maven线在我的项目上设置了mockito:

<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-all</artifactId>
    <version>1.8.5</version>
    <scope>test</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)

我没有使用@Mock注释的问题,但我无法访问和使用mockito方法,如:

when(someMock.someMethod()).thenReturn();
Run Code Online (Sandbox Code Playgroud)

Eclipse只是不识别它们.

请帮忙.

Jef*_*ica 29

尝试调用Mockito.when(foo.getBar()).thenReturn(baz)and Mockito.verify(foo).getBar(),它不依赖于静态导入.与@Mock注释不同,注释在技术上是一个类,when并且verify是Mockito类中的静态方法.

一旦你有了工作,然后尝试David提到的静态导入:

import static org.mockito.Mockito.when;   // ...or...
import static org.mockito.Mockito.*;      // ...with the caveat noted below.
Run Code Online (Sandbox Code Playgroud)

这将允许您在Mockito.when不指定Mockito类的情况下使用.您也可以使用通配符,像这样,但每次这样的SO回答Java文档中使用通配符谨慎推荐-尤其是因为它可以打破,如果类似命名的静态方法是不断加入到后来的Mockito.

添加import org.mockito.*;是不够的,因为它会添加org.mockito包中的所有类,但不会添加方法org.mockito.Mockito.

特别是对于Eclipse,您可以通过将光标放在when部分Mockito.when并按Control-Shift-M("添加导入")来添加静态导入.您还可以添加org.mockito.Mockito到收藏夹("窗口">"首选项">"Java">"编辑器">"内容辅助">"收藏夹">"新类型"),这样即使您没有专门导入它们,所有Mockito静态方法也会显示在Ctrl-Space内容辅助提示中.(您可能还需要为org.mockito.Matchers,这在技术上是可行的org.mockito.Mockito通过继承来做到这一点,但在Eclipse中可能不会出现这个原因.)