我正在使用@Spy注解,当我尝试运行测试时出现以下错误:java.lang.NullPointerException:无法读取数组长度,因为“elementData”为空
这是我拥有的代码:
package com.tddk.junit.service;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Spy;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import java.util.ArrayList;
import java.util.List;
import static org.assertj.core.api.Assertions.*;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;
@Slf4j
@ExtendWith(MockitoExtension.class)
public class StudentServiceTest {
@Spy
List<String> spyList = new ArrayList<String>();
@Test
void whenUsingTheSpyAnnotation_thenObjectIsSpied() {
spyList.add("one");
spyList.add("two");
verify(spyList).add("one");
verify(spyList).add("two");
assertThat(spyList).hasSize(2);
}
}
上面的示例代码来自:https://www.baeldung.com/mockito-spy我完全按照教程说的做,但仍然得到一个错误。有人能告诉我怎么修吗?
1条答案
按热度按时间jm81lzqq1#
这可能是因为您使用的是JDK 17或更高版本,而本文作者使用的是较低的JDK版本。
在JDK 17之后,越来越多的用例被打破,Spy就是其中之一。您可以切换到内联mockmaker来避免这个问题。
切换到内联mockmaker
1.在
test
目录中创建resources
目录。1.然后在
resources
目录中创建一个mockito-extensions
目录。1.在
mockito-extensions
目录中创建一个名为org.mockito.plugins.MockMaker
的文件。1.最后,将文本
mock-maker-inline
添加到org.mockito.plugins.MockMaker
文件中。文件夹结构应如下所示:
也参考这里:Switch the default mockmaker to the inline mockmaker on JDK 17+
最后,我的建议是不要监视列表,而是对真实的列表进行检查。