为什么莫基托认为这个自动连线的豆子是空的

  • 本文关键字: 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 = "..."/>

它自动连接到我的测试类中,并列在我的应用程序上下文测试.xml文件中。我应该首先看什么?
编辑:

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

根据 API:Mockito.mock 采用Class<?>的实例,但在 Spring 配置中,您传递的是一个类的完全限定名称的String,但它不是Class<?>实例。

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

但是,如果您真的想尝试一下,则可以尝试使用Class.forName作为工厂方法声明一个作为类实例的bean。像这样:

<bean id="classInstance" class="java.lang.Class" factory-method="forName">
    <constructor-arg value="org.springframework.web.client.RestTemplate" /> 
</bean>

<bean id="restTemplate" class="org.mockito.Mockito" factory-method="mock">
    <constructor-arg ref="classInstance" /> 
</bean>

相关内容

  • 没有找到相关文章

最新更新