gpt4 book ai didi

java - Mockito Mock 运行 Autowired 类对象

转载 作者:行者123 更新时间:2023-12-01 10:07:41 25 4
gpt4 key购买 nike

我有以下类场景。在测试 MyTestableClass 时,我希望处理 Autowired 类。我只想模拟 AutoWired 类中的变量。

示例类如下-

public class MyTestableClass {

@Autowired
private MyServiceClass service;

public void handleError(){
...
service.doSomething();

}
}

public class MyServiceClass {

@Autowired
private JMSChannel channel;

public void doSomething(){
System.out.println("Inside Service class");
.....
channel.isAvailable();
.....
}
}

@RunWith(MockitoJUnitRunner.class)
public class MyTestableClassTest {
private MyTestableClass testClass= new MyTestableClass();

private JMSChannel channel;

@Before
public void init(){
channel= mock(JMSChannel.class);
when(channel.isAvailable()).thenReturn(Boolean.TRUE);
}

@Test
public void test(){
testClass.handleError();
}
}

例如,控制台在返回 true 之前应该给我“Inside Service class”。

提前致谢!

最佳答案

您需要创建服务的实例(或其模拟)并将其 channel 设置为您的模拟 channel ,然后将 MyTestableClass#service 设置为此 channel 。像这样的东西:

@Before
public void init(){
channel= mock(JMSChannel.class);
when(channel.isAvailable()).thenReturn(Boolean.TRUE);
MyServiceClass service = new MyServiceClass();
ReflectionTestUtils.setField(service, "channel", channel);
myTestableClass = new MyTestableClass();
ReflectionTestUtils.setField(myTestableClass, "service", service);
}

使用来自spring-testReflectionTestUtils (注意:您可以使用 setter 代替)

关于java - Mockito Mock 运行 Autowired 类对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36336090/

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