测试类时,使用 Junit 和 Mockito 检查方法内部的工作
Posted
技术标签:
【中文标题】测试类时,使用 Junit 和 Mockito 检查方法内部的工作【英文标题】:when testing a class, check the work inside the method using a Junit and a Mockito 【发布时间】:2022-01-13 17:08:08 【问题描述】:我有一个包含测试的类,我遇到了困难,我如何检查方法 addBeginList() 中的操作“list.add (int)”是否发生在特定列表上。使用 Moсkito 库,检查是否在类中的列表上调用了特定方法?
public class ClassA implements IClassA
private List<Integer> list;
public ClassA (List<Integer> list)
this.list = list;
@Override
public int addBeginList()
long t1 = System.currentTimeMillis();
list.add(5);
long t2 = System.currentTimeMillis();
return (int) t2 - (int) t1;
测试类
@RunWith(MockitoJUnitRunner.class)
public class ClassATest
private ClassA mockClassA;
private static final int EXPECTED = 0;
private static final int DELTA = 1000;
private static final int SIZE = 7000;
@Before
public void setUp() throws Exception
mockClassA = Mockito.mock(ClassA.class);
mockClassA.initialize(SIZE);
mockClassA.addBeginList();
@Test
public void initialize()
@Test
public void addBeginList()
assertEquals(EXPECTED, mockClassA.addBeginList(), DELTA);
【问题讨论】:
【参考方案1】:第一步是确保测试 ClassA 的真实实例,而不是模拟。
接下来,您可以提供一个真实列表并检查它是否包含某个元素,或者您提供一个模拟列表并使用 Mockito 检查调用了特定方法:
verify(mockedList).add(5)
【讨论】:
【参考方案2】:我找到了解决问题的方法:
public class ClassA extends AbstractList<Integer> implements IClassA ///
在测试类中:
private List<Integer> mockedList;
private ClassA classA;
@Before
public void setUp() throws Exception
mockedList = Mockito.mock(ClassA.class);
classA = new ClassA(mockedList);
@Test
public void addBeginList()
assertEquals(EXPECTED, classA.addBeginList(), DELTA);
verify(mockedList).add(5);
【讨论】:
以上是关于测试类时,使用 Junit 和 Mockito 检查方法内部的工作的主要内容,如果未能解决你的问题,请参考以下文章
使用 Junit 和 Mockito 嵌套异常问题测试 POST Api
如何使用 Mockito 和 JUnit 在 Spring Boot 中测试 POST 方法
使用 JUnit 和 Mockito 对 DAO 类进行单元测试