gpt4 book ai didi

java - doNothing() 不适用于 Spring 中模拟的 @Autowired 字段

转载 作者:行者123 更新时间:2023-12-02 07:31:31 27 4
gpt4 key购买 nike

我在测试类中 Autowiring 了一个字段

@Autowired
private AbcDAO abcDAO;

并像这样使用它

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

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

我在 Spring 文件中模拟了这个 DAO 类,如下所示

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

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

当我像这样使用`@Mock注释时

@Mock
private AbcDAO abcDAO;

直接在测试类中(而不是@Autowiring它并在spring中进行模拟),它工作得很好。

为什么会发生这种情况?

编辑:

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

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

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

最佳答案

查看这个答案:why-does-mockito-think-this-autowired-bean-is-null

Mockito.mock不占用 String但是Class<?> 。正如另一个问题中所述。真的有充分的理由尝试在 Spring 上下文中创建模拟吗?

关于java - doNothing() 不适用于 Spring 中模拟的 @Autowired 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12860654/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com