我在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文件中进行模拟的用例。
答案 0 :(得分:2)
请参阅此答案:why-does-mockito-think-this-autowired-bean-is-null
Mockito.mock
不会String
而是Class<?>
。正如其他问题所述。真的有理由尝试在Spring上下文中创建模拟吗?