gpt4 book ai didi

java - 对采用列表作为参数的方法进行单元测试

转载 作者:行者123 更新时间:2023-11-30 02:24:22 24 4
gpt4 key购买 nike

我需要测试一个以列表作为参数的方法。下面是示例代码:

public class C
{
private int x;
private String y;
//getters and setters
}
public class B
{
public void collectC(List<C> cList)
{
for(C c : cList)
{
System.out.println("int: " + c.getX() + "String: "+ c.getY());
}
}
}

因此,B 类只是收集 C 类的对象,并使用增强的 for 循环对其进行迭代。现在,我想测试B类的一个方法。下面是测试代码。

public class BTest
{
private List<C> cList;
@Mock private C c;
@InjectMocks private B b;

@Before
public void setUp()
{
cList = new ArrayList<>();
cList.add(c);
MockitoAnnotations.initMocks(this);
}

@Test
public void testCollectC()
{
Mockito.when(c.getX()).thenReturn(5);
Mockito.when(c.getY()).thenReturn("Hello There");
b.collectC(cList);
}
}

因此,这在我调用 'c' 对象上的方法的 System.out.println() 一行上给了我错误 NullPointerException 。然后我也更改了模拟列表和迭代器的代码,所以现在我的代码工作正常。但我想知道上述代码有什么问题以及为什么失败?

最佳答案

在将c添加到cList之前,您必须实例化c,否则cList将包含空元素。

以下测试通过:

public class BTest {
private List<C> cList;
@Mock
private C c;

@InjectMocks
private B b;

@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
cList = new ArrayList<>();
cList.add(c);
}

@Test
public void testCollectC() {
Mockito.when(c.getX()).thenReturn(5);
Mockito.when(c.getY()).thenReturn("Hello There");
b.collectC(cList);
}
}

关于java - 对采用列表作为参数的方法进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46053990/

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