【发布时间】:2020-02-16 17:33:58
【问题描述】:
我想创建一个带有测试模拟对象的 JUnit 测试:
public class BinCountryCheckFilterImplTest {
private RiskFilterService riskFilterService = null;
@Before
public void beforeEachTest() {
List<RiskFilters> list = new ArrayList<RiskFilters>();
riskFilterService = Mockito.mock(RiskFilterService.class);
// put here list of List<RiskFilters> and return it
}
@Test
public void testBinCountryCheckFilterImpl() {
List<RiskFilters> filter_list = riskFilterService.findRiskFiltersByTerminalIdAndType(11, "test");
// do something
}
}
当RiskFilterService 被调用时,我如何返回列表List<RiskFilters>?
第二次尝试:
public class BinCountryCheckFilterImplTest {
private RiskFilterService riskFilterService = null;
@Mock
List<RiskFilters> mockList = new ArrayList<RiskFilters>();
@BeforeClass
public void beforeEachTest() {
//if we don't call below, we will get NullPointerException
MockitoAnnotations.initMocks(this);
mockList.add(new RiskFilters());
riskFilterService = Mockito.mock(RiskFilterService.class);
}
@Test
public void testBinCountryCheckFilterImpl() {
when(riskFilterService.findRiskFiltersByTerminalIdAndType(anyInt(), anyString())).thenReturn(mockList);
List<RiskFilters> filter_list = riskFilterService.findRiskFiltersByTerminalIdAndType(11, "BinCountryCheckFilter");
}
}
但我得到了riskFilterService 的 NPE。看起来带有注解@test 的方法是在@BeforeClass 之前调用的。
【问题讨论】:
-
RiskFilterService是您要测试的课程吗?你想模拟什么方法? -
是的,我想模拟来自
findRiskFiltersByTerminalIdAndType的结果 -
类似:
Mockito.when(riskFilterService.findRiskFiltersByTerminalIdAndType(anyInt(), anyString()).thenReturn(new ArrayList<RiskFilters>()); -
我收到
The method thenReturn(ArrayList<RiskFilters>) is undefined for the type List<RiskFilters> -
你能把你想测试的方法贴出来吗?你使用什么版本的 jUnit?
标签: java junit mocking mockito junit5