12

我使用以下 Maven 行在我的项目中设置了 mockito:

<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-all</artifactId>
    <version>1.8.5</version>
    <scope>test</scope>
</dependency>

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

when(someMock.someMethod()).thenReturn();

Eclipse 只是无法识别它们。

请帮忙。

4

2 回答 2

35

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

一旦你有这个工作,然后尝试大卫提到的静态导入:

import static org.mockito.Mockito.when;   // ...or...
import static org.mockito.Mockito.*;      // ...with the caveat noted below.

这将允许您在Mockito.when不指定Mockito类的情况下使用。您也可以使用通配符,但是根据这个 SO 答案Java 文档建议谨慎使用通配符——尤其是因为如果稍后将类似名称的静态方法添加到 Mockito 中,它可能会中断。

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

特别是对于 Eclipse,您可以通过将光标放在when部件上Mockito.when并按 Control-Shift-M(“添加导入”)来添加静态导入。您还可以添加org.mockito.Mockito到您的收藏夹(Window > Preferences > Java > Editor > Content Assist > Favorites > New Type),以便所有 Mockito 静态方法都显示在您的 Ctrl-Space 内容辅助提示中,即使您没有专门导入它们。(您可能还想对 org.mockito.Matchers 执行此操作,它们在技术上可通过继承在 org.mockito.Mockito 上使用,但由于这个原因可能不会出现在 Eclipse 中。)

于 2012-12-31T01:19:32.580 回答
2

Kotlin 语法 - 不要忘记 ` ` 反引号:

import org.mockito.Mockito.`when`


`when`(someMock.someMethod()).thenReturn();
于 2020-04-18T16:45:07.307 回答