Mockito возвращает нулевой указатель при издевании над сервисом / контроллером - PullRequest
0 голосов
/ 28 декабря 2018

когда я пытался запустить тест, он выбрасывает нулевой указатель на userService.setUser (user);и попытался запустить его в режиме отладки, он просто инициировал мои издевательства как нулевые.я что-то упускаю?кто-нибудь еще сталкивался с подобной проблемой раньше?я попытался использовать @spy на userService, но не повезло.

// пакет SERVICE com.ecommerce.munna.user;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Service;

import java.util.*;

@Service
public class UserService {

    @Autowired
    private UserRepository userRepository;

    public void setUser(User user) {
        userRepository.save(user);
    }

    public List<User> getAllUsers() {
        List<User> userList = new ArrayList<>();
        userRepository.findAll()
                .forEach(userList::add);    //findAll is an interable so convert this into list to send it back
        return userList;
    }

    /*public User getUserByUserNameandPassword(String userName, String password)
    {
        return userRepository.findByIdandPassword(userId,password);
    }*/

}

// TEST

package com.ecommerce.munna.user;

import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Spy;
import org.mockito.junit.MockitoJUnitRunner;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.ArrayList;

import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.when;
//
@RunWith(MockitoJUnitRunner.class)
class UserServiceTest {
    @Mock
    private TestBuilder testBuilder;
    @Mock
    private User user;
    @Mock
    private  UserRepository userRepository;

    @InjectMocks
    private UserService userService;

    @Test
    void setUser_shouldStoreNewuserInRepository() throws Exception {
        ArrayList<User> userList= new ArrayList<User>();

        user=testBuilder.tetsUserBuilder();
        user.setId(1L);
        userList.add(user);
        user.setId(2L);
        userList.add(user);

        userService.setUser(user);
         when(userRepository.findAll()).thenReturn(userList);


        assertEquals(2,userList.size());

    }
}

ТЕСТ БИЛДЕР

package com.ecommerce.munna.user;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class TestBuilder {

//    @Autowired User user;
//    @Bean
    public static User tetsUserBuilder(){
        User user=new User.UserBuilder()
                .id(1L)
                .userName("munnaTest")
                .password("testPassword")
                .firstName("munna")
                .lastName("Gunturu")
                .dateOfBirth("06/06/1999")
                .eMail("m@yahoo.com")
                .gender("Male")
                .build();
        return user;
    }
}

1 Ответ

0 голосов
/ 28 декабря 2018

Добро пожаловать в переполнение стека!

Любой юнит тестирует стоимостные составляющие частей дерева в определенном порядке: упорядочить , действовать и утверждать .

Ваш тест выполняет аранжировку части после акта части:

   userService.setUser(user); // act
     when(userRepository.findAll()).thenReturn(userList); // arrange

Последняя строка ее должна быть первой в методе теста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...