0

我有这个类叫做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>
4

1 回答 1

3

根据 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>
于 2012-10-11T21:40:50.013 回答