gpt4 book ai didi

java - 来自模拟 bean 的方法无法正常工作

转载 作者:行者123 更新时间:2023-12-02 03:24:28 25 4
gpt4 key购买 nike

我想为服务中的方法创建单元测试,这意味着我不想使用 @RunWith(SpringRunner.class) 尽管它可以解决我的问题。

这就是我的程序的样子:

    @Service
public class MyService {
private final SomeBean someBean;
public MyService(SomeBean someBean) {
this.someBean = someBean;
}
public boolean functionToTest() {
boolean b = someBean.innerFunction(); // inside innerFunction() I return always true;
return b;
}
}
}

public class SomeBean extends BaseBean {
private String value; // getter, setter
public SomeBean(String value) { //this value is always null in test
super();
this.value = value;
}
public boolean innerFunction() {
return true;
}
}

@Configuration
public class SomeBeanConfiguration {
@Bean
public SomeBean getSomeBean(@Value("${prop.value}") String value) {
return new SomeBean(value); //can't get here while debugging test
}
}

这就是我想要测试functionToTest()的方式:

    @RunWith(MockitoJUnitRunner.class)
public class MyTest {

@InjectMocks
MyService service;

@Mock
SomeBean someBean;

@Before
public void setUp(){
MockitoAnnotations.initMocks(this); //although result is the same even without this set up
}

@Test
public void test() {
assertTrue(service.functionToTest());
}
}

测试总是失败,因为默认情况下 boolean bfalse 并且我无法使用调试器进入innerFunction()。

有没有办法模拟 bean 来进行这种单元测试?

最佳答案

您正在使用MockitoJUnitRunner,这就是您的Spring配置在测试期间未启动的原因 - 未创建上下文。但这不是这里的主要问题,因为您想对逻辑进行单元测试。

如果您想对从 Spring Context 获取的 spring bean 进行单元测试,您可能会使用 SpringJUnit4ClassRunner (对于 JUnit4)和 @MockBean (仅在 Spring Boot 中可用)注释,用于在 Spring 上下文中模拟 bean 进行测试。

当你使用mockito创建一个模拟时,你必须实际说出当方法被调用时这个模拟应该做什么。例如:

Mockito.when(someBean.innerFunction()).thenReturn(true);

这里你说“当在我的模拟对象上调用方法 innerFunction 时,请返回 true”。

所以你的测试可能看起来像:

@Test
public void test() {
Mockito.when(someBean.innerFunction()).thenReturn(true);
assertTrue(service.functionToTest());
}

此外,您不需要在 @Before 注解方法中使用 MockitoAnnotations.initMocks(this),因为您已经在使用 @InjectMocks 注解.

关于java - 来自模拟 bean 的方法无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56913506/

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