doNothing()不使用Spring中模拟的@Autowired字段

时间:2012-10-12 13:56:09

标签: java spring junit mocking mockito

我在Test class中已经自动安装了一个字段

@Autowired
private AbcDAO abcDAO;

并像这样使用它

doThrow(new RuntimeException()).when(abcDAO).methodName(xyz);

doNothing().when(abcDAO).methodName(xyz);

我在像这样的弹簧文件中嘲笑了这个DAO类

<bean id="abcDAO" class="org.mockito.Mockito" factory-method="mock"  >
        <constructor-arg value="a.b.c.abcDAO" />
    </bean>

我得到NotAMockException Argument passed to when() is not a mock.

当我使用像这样的@Mock注释

@Mock
    private AbcDAO abcDAO;
在测试类中直接

(而不是@Autowiring它和春天的模拟),它工作正常。

为什么会这样?

编辑:

好的,让我告诉你这样做的原因。

我们有一个服务X,我想为'X'的API编写junits。 Junits是以创建客户端并调用这些API的方式编写的。我没有直接调用@Mock和@Inject模拟的方法。

我不确定它是否清楚,但这是需要在spring文件中进行模拟的用例。

1 个答案:

答案 0 :(得分:2)

请参阅此答案:why-does-mockito-think-this-autowired-bean-is-null

Mockito.mock不会String而是Class<?>。正如其他问题所述。真的有理由尝试在Spring上下文中创建模拟吗?