gpt4 book ai didi

java - 使用 Mockito 模拟由 spring 应用程序上下文创建的本地对象

转载 作者:行者123 更新时间:2023-12-02 00:09:34 26 4
gpt4 key购买 nike

我正在尝试使用 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/

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