带有 Mockito 1.9.5 的 Java 1.8 给出编译错误

标签 java mockito

切换到 Java 1.8 后。 JDK 我的一些测试类编译失败。 实现类示例:

import java.util.concurrent.Callable;
import java.util.concurrent.Future;

public class ImplClass {

    public <T> Future<T> executeTask(final Callable<T> task) {
        return null;
    }
}

这是 Mockito 的测试类:

import static org.mockito.Matchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

import java.util.concurrent.Callable;

import org.junit.Before;

public class TestClass {

    private ImplClass implClassMock;

    @Before
    public void setUp() {
        implClassMock = mock(ImplClass.class);
        when(implClassMock.executeTask(any(Callable.class))).thenReturn(null);
    }
}

我收到错误消息:The method executeTask(Callable<T>) in the type ImplClass is not applicable for the arguments (Callable)

切换回 java 编译器 1.7 一切正常。

知道如何解决这个问题吗?

最佳答案

从 Java 8 开始,compiler type inference有了很大的提高。

现在您可以在没有任何编译警告的情况下从匹配器中删除类参数:

when(implClassMock.executeTask(any())).thenReturn(null);

注意:我遇到了同样的编译器故障,但仅限于 eclipse。可能是错误?

关于带有 Mockito 1.9.5 的 Java 1.8 给出编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24675745/

相关文章:

java - 在 jtable 上方绘制 jtable 单元格编辑器

java - Hibernate 在 ManyToOne 关系中处理 long 0 值而不是 NULL

java - 如何将带有 Object[] 的 ArrayList 转换为 Object[][] 数组?

java - ReflectionUtils 如何替换已弃用的方法?

java - 我可以在第一个方法的 then 语句中模拟另一个方法吗?

java - 模拟对象没有为我服务?

java - 重定向 URL 应为 : </> but was<null> in Junit

java - 是否有等效的 verifyZeroInteractions() 用于验证与模拟对象交互的确切数量?

java - 使用 mockito 对 DAO 层进行单元测试

java - 为什么 JTable 在 ChangeSelection 后不更新渲染器