Spring Boot 尝试使用@Spy Annotation时出错:java.lang.NullPointerException:无法读取数组长度,因为“elementData”为空

plupiseo  于 2023-04-30  发布在  Spring
关注(0)|答案(1)|浏览(161)

我正在使用@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我完全按照教程说的做,但仍然得到一个错误。有人能告诉我怎么修吗?

jm81lzqq

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+
最后,我的建议是不要监视列表,而是对真实的列表进行检查。

相关问题