我正在尝试使用 Mockito 框架来模拟一个本地对象,该对象是从 spring 应用程序上下文创建的;但每次我运行应用程序时,它都无法用模拟对象替换原始对象。
这是原始类的代码 spinets:
public void executeMyJob(){
ApplicationContext springContext = ApplicationContextUtil.getApplicationContext();
MusicEAO music= (MusicEAO) springContext.getBean("MusicEAO");
List<Brand> dataList =music.getAll();
......
}
我想模拟 MusicEAO
,因此当调用 getAll()
方法时,它将使用模拟对象。
下面是我的测试类代码片段:
@Mock
MusicEAO musicEAO;
when(musicEAO.findAll()).thenReturn(myDefinedList);
如何解决这个问题?
最佳答案
很难从您发布的 cod 中看出,但问题可能是您在测试中模拟 MusicEAO,但您正在执行的代码正在使用 Spring ApplicationContext 来获取对 MusicEAO bean 的引用。
您的原始类不应使用 MusicEAO music= (MusicEAO) springContext.getBean("MusicEAO");
,而是使用 Spring 使用 @Autowired
通过 Spring 注入(inject) bean构造函数或 setter 方法(或其他依赖项注入(inject)方法)。然后您的测试将能够轻松地注入(inject)模拟版本。
class MyJobClass {
MusicEAO music;
@Autowired
public MyJobClass(MusicEAO musicEao) {
this.music = musicEao;
}
public void executeMyJob(){
List<Brand> dataList =music.getAll();
......
}
}
当你说
every time I run the application it fails to replace the original object with the mocked object
您不必运行应用程序来运行此类的单元测试 - 您是在问如何将模拟注入(inject)到正在运行的应用程序中吗?
.
关于java - 使用 Mockito 模拟由 spring 应用程序上下文创建的本地对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13123510/