Spring Boot Jpastreamer – JUnit测试中的java.lang.NullPointerException

huangapple go评论71阅读模式
英文:

Spring Boot Jpastreamer - java.lang.NullPointerException in JUnit Test

问题

这个问题可能出在Mockito.when(personStreamMock.filter(Mockito.any())).thenReturn(filteredStreamMock);这一行上,它抛出了空指针异常。

为了解决这个问题,你可以尝试将personStreamMock模拟对象的filter方法与filteredStreamMock进行交互时的行为进行模拟。这可以通过使用Mockito.doReturn()来完成,而不是Mockito.when()

请尝试将以下代码行替换原来的代码:

Mockito.doReturn(filteredStreamMock).when(personStreamMock).filter(Mockito.any());

这将设置personStreamMock对象的filter方法在调用时返回filteredStreamMock,而不会引发空指针异常。

希望这可以解决你的问题。如果还有其他问题,请随时提出。

英文:

I have a problem to write JUnit test for Jpastreamer in MY Spring Boot app.

Here is the service shown below

@Service
@RequiredArgsConstructor
public class PersonService {

    private final JPAStreamer jpaStreamer;

    public List<Person> findByAgeForJpaStreamer(Integer age) {
        return jpaStreamer.stream(Person.class).
                filter(Person$.age.equal(age)).
                collect(Collectors.toList());
    }

}

Here is the BaseServiceTest shown below

@ExtendWith(MockitoExtension.class)
@ActiveProfiles(value = "test")
public abstract class BaseServiceTest {
}

Here is PersonServiceTest shown below

class PersonServiceTest extends BaseServiceTest {

    @InjectMocks
    private PersonService personService;

    @Mock
    private JPAStreamer jpaStreamer;

    private List<Person> personList;

    @BeforeEach
    public void setup() {
        personList = Arrays.asList(
                Person.builder().id(1L).firstName("John").lastName("Doe").age(33).birthday(LocalDate.of(1990, 5, 15)).build(),
                Person.builder().id(2L).firstName("Jane").lastName("Smith").age(27).birthday(LocalDate.of(1996, 9, 20)).build(),
                Person.builder().id(3L).firstName("David").lastName("Johnson").age(32).birthday(LocalDate.of(1991, 9, 20)).build()
        );
    }

    @Test
    public void testJpaStreamerFindByAge() {

        // given
        Stream<Person> personStreamMock = personList.stream();
        Stream<Person> filteredStreamMock = personStreamMock
                .filter(person -> person.getAge() == 32);
        List<Person> collectedListMock = filteredStreamMock.collect(Collectors.toList());

        // whwn
        Mockito.when(jpaStreamer.stream(Person.class)).thenReturn(personStreamMock);
        Mockito.when(personStreamMock.filter(Mockito.any())).thenReturn(filteredStreamMock);
        Mockito.when(filteredStreamMock.collect(Collectors.toList())).thenReturn(collectedListMock);

        // then
        List<Person> actualPersons = personService.findByAgeForJpaStreamer(32);

        // Assert the result
        assertEquals(collectedListMock, actualPersons);
        assertEquals(collectedListMock.size(), actualPersons.size());

        // Assert each person's properties
        for (int i = 0; i < collectedListMock.size(); i++) {
            assertEquals(collectedListMock.get(i).getId(), actualPersons.get(i).getId());
            assertEquals(collectedListMock.get(i).getFirstName(), actualPersons.get(i).getFirstName());
            assertEquals(collectedListMock.get(i).getLastName(), actualPersons.get(i).getLastName());
            assertEquals(collectedListMock.get(i).getAge(), actualPersons.get(i).getAge());
            assertEquals(collectedListMock.get(i).getBirthday(), actualPersons.get(i).getBirthday());
        }

        // Verify the JPAStreamer method calls
        Mockito.verify(jpaStreamer, Mockito.times(1)).stream(Person.class);
        Mockito.verify(personStreamMock, Mockito.times(1)).filter(Mockito.any());
        Mockito.verify(filteredStreamMock, Mockito.times(1)).collect(Collectors.toList());
    }

I have a problem in that line

Mockito.when(personStreamMock.filter(Mockito.any())).thenReturn(filteredStreamMock);

It throws null pointer exception.

How can I fix it?

答案1

得分: 0

在项目中定义了jpastreamer配置后,问题消失了。

@Configuration
@RequiredArgsConstructor
public class JPAStreamerConfig {

    private final EntityManagerFactory entityManagerFactory;

    @Bean
    public JPAStreamer jpaStreamer() {
        return JPAStreamer.of(entityManagerFactory);
    }

}
英文:

After defining jpastreamer configuration in the project, the issue disappeared.

@Configuration
@RequiredArgsConstructor
public class JPAStreamerConfig {

    private final EntityManagerFactory entityManagerFactory;

    @Bean
    public JPAStreamer jpaStreamer() {
        return JPAStreamer.of(entityManagerFactory);
    }

}

huangapple
  • 本文由 发表于 2023年7月13日 19:36:25
  • 转载请务必保留本文链接:https://go.coder-hub.com/76678940.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定