为什么Mockito认为这个autowired bean是null?

时间:2012-10-11 20:01:22

标签: spring junit mockito

我有一个名为restTemplate的类。它是Spring Framework中的RestTemplate对象。我试图在我的Mockito测试的设置方法的开头重置它,但我得到例外:

org.mockito.exceptions.misusing.NotAMockException: Argument should be a mock, but is null!

所以我做错了什么?我有

下列出的正确软件包
<context:component-scan base-package = "..."/>

它自动装入我的测试类,并列在我的applicationContext-test.xml文件中。我应该先看一下什么?
编辑:

<bean id="restTemplate" class="org.mockito.Mockito" factory-method="mock">
    <constructor-arg value="org.springframework.web.client.RestTemplate" />
</bean>

1 个答案:

答案 0 :(得分:3)

根据API:Mockito.mock接受Class<?>的实例,但在您的spring配置中,您传递的是String,它是类的完全限定名称,但它不是{ {1}}实例。

这引出了一个问题,为什么要在Spring配置中设置模拟?为什么不在测试中实例化测试中的类并在那里创建模拟。模拟设计为单元测试。如果要加载上下文,则可能正在进行集成测试。并不是说在JUnit测试中加载上下文是件坏事,但在其中使用Mocks似乎是在混合。

但是,如果你真的想尝试一下,你可以尝试使用Class.forName作为工厂方法来声明一个类实例的bean。类似的东西:

Class<?>