gpt4 book ai didi

java - 如何在我正在为其编写 junit 测试的方法中模拟方法调用

转载 作者:行者123 更新时间:2023-11-29 05:01:43 25 4
gpt4 key购买 nike

谁能帮我模拟方法中的方法调用

我的代码是这样的:

public class Service {
public List<Bean> Filter(Bean bean){
List<Bean> Filtered_List = getUtilityService.getBeanList();
//Do something
return beanList;
}
}

现在我想为服务类编写测试用例。我怎么能 mock :列表 Filtered_List = getUtilityService.getBeanList();并在其中设置值。

最佳答案

干净的解决方案是将 UtilityService 提取到一个字段并将模拟传递给构造函数。

public class Service {
private UtilityService utilityService;

public Service(UtilityService utilityService) {
this.utilityService = utilityService;
}

public List<Bean> Filter(Bean bean){
List<Bean> filteredList = utilityService.getBeanList();
//Do something
return beanList;
}
}

你也可以引入一个 UtilityServiceFactory 并在 Service 中有一个 utilityServiceFactory 字段。

public class Service {
private UtilityServiceFactory utilityServiceFactory;

public Service(UtilityServiceFactory utilityService) {
this.utilityServiceFactory = utilityServiceFactory;
}

public List<Bean> Filter(Bean bean){
List<Bean> filteredList = utilityService.create().getBeanList();
//Do something
return beanList;
}
}

如果getUtilityService 位于Service 类中,还有一个肮脏的解决方案:partial mock。但我不推荐它。最好重构您的代码并使用以前的方法之一。

编辑: 使用 @InjectMocks 进行构造函数注入(inject)不是最好的主意,但你在这里:

import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.BDDMockito.given;
//other imports

@RunWith(MockitoJUnitRunner.class)
public class ServiceTest {
@Mock
UtilityService utilityService;

@InjectMocks
Service service = new Service(null);

@Test
public void shouldFilterBeans() throws Exception {
//given
given(utilityService.getBeanList()).willReturn(asList(new Bean()));

//when
List<Bean> result = service.filter(new Bean());

//then
assertThat(result).hasSize(1); //probably you want to check something else
}
}

关于java - 如何在我正在为其编写 junit 测试的方法中模拟方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31917749/

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