Java 测试弹簧靴时出现问题()。然后返回零件

Java 测试弹簧靴时出现问题()。然后返回零件,java,spring-boot,unit-testing,nullpointerexception,mockito,Java,Spring Boot,Unit Testing,Nullpointerexception,Mockito,我试图在spring boot中测试我的代码,但我发现 java.lang.NullPointerException 运行代码时出现异常。 以下是我的模型: package com.Loyalty.OpenLoyalty.Models.User; import org.hibernate.annotations.DynamicUpdate; import org.hibernate.annotations.GenericGenerator; import org.springframewor

我试图在spring boot中测试我的代码,但我发现

java.lang.NullPointerException
运行代码时出现异常。 以下是我的模型:

package com.Loyalty.OpenLoyalty.Models.User;

import org.hibernate.annotations.DynamicUpdate;
import org.hibernate.annotations.GenericGenerator;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;

import javax.persistence.*;
import javax.swing.text.StyledEditorKit;
import java.sql.Timestamp;
import java.util.HashSet;
import java.util.Set;


@Entity

@Table(name = "ol__user")
@DynamicUpdate
@EntityListeners(AuditingEntityListener.class)
public class ol__user {
    public ol__user() {
    }
    public ol__user(String first_name, String last_name, String Email, String username, String password, String dtype, Boolean is_active,ol__roles role,String salt,Timestamp create_at){
        super();
        this.first_name=first_name;
        this.last_name=last_name;
        this.password=password;
        this.email=Email;
        this.is_active=is_active;
        this.username=username;
        this.dtype=dtype;
        this.role=role;
        this.salt=salt;
        this.create_at=create_at;

    }

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "system-uuid")
    @GenericGenerator(name = "system-uuid", strategy = "uuid")
    @Column(name = "id", unique = true, nullable = false)
    private String id;

    @Column(name = "username", nullable = true)
    private String username;

    @Column(name = "password", nullable = false)
    private String password;

    @Column(name = "salt", nullable = true)
    private String salt;

    @Column(name = "is_active", nullable = false)
    private Boolean is_active;

    @Column(name = "create_at", nullable = true)
    private Timestamp create_at;

    @Column(name = "email", nullable = false)
    private String email;

    @Column(name = "password_requested_at", nullable = true)
    private Timestamp password_requested_at;

    @Column(name = "confirmation_token", nullable = true)
    private String confirmation_token;

    @Column(name = "deleted_at", nullable = true)
    private Timestamp deleted_at;

    @Column(name = "last_login_at", nullable = true)
    private Timestamp last_login_at;

    @Column(name = "dtype", nullable = false)
    private String dtype;

    @Column(name = "temporary_password_set_at", nullable = true)
    private Timestamp temporary_password_set_at;

    @Column(name = "action_token", nullable = true)
    private String action_token;

    @Column(name = "referral_customer_email", nullable = true)
    private String referral_customer_email;

    @Column(name = "newsletter_used_flag", nullable = true)
    private Boolean newsletter_used_flag;

    @Column(name = "phone", nullable = true)
    private String phone;

    @Column(name = "status_type", nullable = true)
    private String status_type;

    @Column(name = "status_state", nullable = true)
    private String status_state;

    @Column(name = "first_name", nullable = true)
    private String first_name;

    @Column(name = "last_name", nullable = true)
    private String last_name;

    @Column(name = "external", nullable = true)
    private Boolean external;

    @Column(name = "api_key", nullable = true)
    private String api_key;

    @Column(name = "allow_point_transfer", nullable = true)
    private Boolean allow_point_transfer;

    @ManyToOne(cascade = {CascadeType.ALL})
    @JoinTable(name="ol__users_roles",
            joinColumns={@JoinColumn(name="user_id")},
            inverseJoinColumns={@JoinColumn(name="role_id")})
    private ol__roles role;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getSalt() {
        return salt;
    }

    public void setSalt(String salt) {
        this.salt = salt;
    }

    public Boolean getIs_active() {
        return is_active;
    }

    public void setIs_active(Boolean is_active) {
        this.is_active = is_active;
    }

    public Timestamp getCreate_at() {
        return create_at;
    }

    public void setCreate_at(Timestamp create_at) {
        this.create_at = create_at;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public Timestamp getPassword_requested_at() {
        return password_requested_at;
    }

    public void setPassword_requested_at(Timestamp password_requested_at) {
        this.password_requested_at = password_requested_at;
    }

    public String getConfirmation_token() {
        return confirmation_token;
    }

    public void setConfirmation_token(String confirmation_token) {
        this.confirmation_token = confirmation_token;
    }

    public Timestamp getDeleted_at() {
        return deleted_at;
    }

    public void setDeleted_at(Timestamp deleted_at) {
        this.deleted_at = deleted_at;
    }

    public Timestamp getLast_login_at() {
        return last_login_at;
    }

    public void setLast_login_at(Timestamp last_login_at) {
        this.last_login_at = last_login_at;
    }

    public String getDtype() {
        return dtype;
    }

    public void setDtype(String dtype) {
        this.dtype = dtype;
    }

    public Timestamp getTemporary_password_set_at() {
        return temporary_password_set_at;
    }

    public void setTemporary_password_set_at(Timestamp temporary_password_set_at) {
        this.temporary_password_set_at = temporary_password_set_at;
    }

    public String getAction_token() {
        return action_token;
    }

    public void setAction_token(String action_token) {
        this.action_token = action_token;
    }

    public String getReferral_customer_email() {
        return referral_customer_email;
    }

    public void setReferral_customer_email(String referral_customer_email) {
        this.referral_customer_email = referral_customer_email;
    }

    public Boolean getNewsletter_used_flag() {
        return newsletter_used_flag;
    }

    public void setNewsletter_used_flag(Boolean newsletter_used_flag) {
        this.newsletter_used_flag = newsletter_used_flag;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getStatus_type() {
        return status_type;
    }

    public void setStatus_type(String status_type) {
        this.status_type = status_type;
    }

    public String getStatus_state() {
        return status_state;
    }

    public void setStatus_state(String status_state) {
        this.status_state = status_state;
    }

    public String getFirst_name() {
        return first_name;
    }

    public void setFirst_name(String first_name) {
        this.first_name = first_name;
    }

    public String getLast_name() {
        return last_name;
    }

    public void setLast_name(String last_name) {
        this.last_name = last_name;
    }

    public Boolean getExternal() {
        return external;
    }

    public void setExternal(Boolean external) {
        this.external = external;
    }

    public String getApi_key() {
        return api_key;
    }

    public void setApi_key(String api_key) {
        this.api_key = api_key;
    }

    public Boolean getAllow_point_transfer() {
        return allow_point_transfer;
    }

    public void setAllow_point_transfer(Boolean allow_point_transfer) {
        this.allow_point_transfer = allow_point_transfer;
    }

    public ol__roles getRoles() {
        return role;
    }

    public void setRoles(ol__roles role) {
        this.role = role;
    }
}

我的服务:

    @Service
    public class userService   {
        @Autowired
        private userRepository userRepository;

         public ol__users getAllAdminUsers( ){

                ol__users response = new ol__users();
                ArrayList<ol__user> list=new ArrayList<>();
                userRepository.find

Bydtype("admin").forEach(e ->list.add(e));
            response.setUsersList(list);
            return response;




            }
    }
将列表存储在其中,但在下一行中,我的结果对象返回null,然后发生异常。
我想知道我的问题在哪里?

是的,因为您正在测试控制器并将mock注入控制器,因此控制器中的服务被模拟,并且
getAllAdminUsers()
返回null

您应该为控制器编写一个测试,为服务编写另一个测试

ExtendWith(MockitoExtension.class)
@RunWith(MockitoJUnitRunner.class)
public class ControllerTest {

    @InjectMocks
    private Ol__userController Ol__userController;
    @Mock
    private userRepository userRepository;
    @Mock
    private userService userService;

    @Test
    public void testFindAll(){
        // Arrange
        ol__roles role=new ol__roles();
        role.setName("tests");
        role.setRole("Admin");
        role.setIs_master(true);
        Timestamp currentSqlTimestamp = new Timestamp(System.currentTimeMillis());
        ol__user user1=new ol__user("anteaaa","nejatiaan","anteeaaaa@yahoo.com","anteaaaaa","12345","admin",true,role,"123",currentSqlTimestamp);
        ol__user user2=new ol__user("Nooria","Rajaee","Nooriaaaa@yahoo.com","Nooriaa","12345","admin",true,role,"123",currentSqlTimestamp);
        List<ol__user> list = new ArrayList<ol__user>();
        list.addAll(Arrays.asList(user1,user2));

        Mockito.when(ol__users result = userService.getAllAdminUsers()
).thenReturn(list);

        // Act
        List<ol__user> actual = Ol__userController.getAllAdminUsers();

        // Assert
        assertThat(actual.getUsersList().size()).isEqualTo(2);
        assertThat(actual.getUsersList().get(0).getFirst_name())
                .isEqualTo(user1.getFirst_name());
    }
}
ExtendWith(MockitoExtension.class)
@RunWith(MockitoJUnitRunner.class)
公共类控制器测试{
@注射模拟
专用Ol__用户控制器Ol__用户控制器;
@嘲弄
私有用户存储库用户存储库;
@嘲弄
私人用户服务;
@试验
公共void testFindAll(){
//安排
ol__角色=新ol__角色();
角色。集合名(“测试”);
role.setRole(“管理员”);
角色。setIs_master(真);
Timestamp currentSqlTimestamp=新的时间戳(System.currentTimeMillis());
ol___用户user1=新ol__用户(“anteaa”、“nejatian”anteeaaaa@yahoo.com“,”anteaaaa“,”12345“,”admin“,”true,“role”,“123”,currentSqlTimestamp);
ol_uuuuser user2=新的ol_uuu用户(“Nooria”、“Rajaee”、”Nooriaaaa@yahoo.com“,”Nooriaa“,”12345“,”admin“,”true“,”角色“,”123“,”currentSqlTimestamp”);
列表=新的ArrayList();
addAll(Arrays.asList(user1,user2));
Mockito.when(ol_uuuusers result=userService.getAllAdminUsers()
).然后返回(列表);
//表演
List actual=Ol_uuusercontroller.getAllAdminUsers();
//断言
assertThat(actual.getUsersList().size()).isEqualTo(2);
assertThat(实际.getUsersList().get(0).getFirst\u name())
.isEqualTo(user1.getFirst_name());
}
}
,服务测试

ExtendWith(MockitoExtension.class)
@RunWith(MockitoJUnitRunner.class)
public class ServiceTest {
    @InjectMocks
    private userService userService;

    @Mock
    private userRepository userRepository;

    @Test
    public void testFindAll(){
        // Arrange
        ol__roles role=new ol__roles();
        role.setName("tests");
        role.setRole("Admin");
        role.setIs_master(true);
        Timestamp currentSqlTimestamp = new Timestamp(System.currentTimeMillis());
        ol__user user1=new ol__user("anteaaa","nejatiaan","anteeaaaa@yahoo.com","anteaaaaa","12345","admin",true,role,"123",currentSqlTimestamp);
        ol__user user2=new ol__user("Nooria","Rajaee","Nooriaaaa@yahoo.com","Nooriaa","12345","admin",true,role,"123",currentSqlTimestamp);
        List<ol__user> list = new ArrayList<ol__user>();
        list.addAll(Arrays.asList(user1,user2));
        when(userRepository.findBydtype(any())).thenReturn(list);

        // Act
        ol__users result = userService.getAllAdminUsers();

        //Assert
        assertThat(result.getUsersList().size()).isEqualTo(2);
        assertThat(result.getUsersList().get(0).getFirst_name())
                .isEqualTo(user1.getFirst_name());
    }
}

ExtendWith(MockitoExtension.class)
@RunWith(MockitoJUnitRunner.class)
公共类服务测试{
@注射模拟
私人用户服务;
@嘲弄
私有用户存储库用户存储库;
@试验
公共void testFindAll(){
//安排
ol__角色=新ol__角色();
角色。集合名(“测试”);
role.setRole(“管理员”);
角色。setIs_master(真);
Timestamp currentSqlTimestamp=新的时间戳(System.currentTimeMillis());
ol___用户user1=新ol__用户(“anteaa”、“nejatian”anteeaaaa@yahoo.com“,”anteaaaa“,”12345“,”admin“,”true,“role”,“123”,currentSqlTimestamp);
ol_uuuuser user2=新的ol_uuu用户(“Nooria”、“Rajaee”、”Nooriaaaa@yahoo.com“,”Nooriaa“,”12345“,”admin“,”true“,”角色“,”123“,”currentSqlTimestamp”);
列表=新的ArrayList();
addAll(Arrays.asList(user1,user2));
when(userRepository.findBydtype(any())。然后return(list);
//表演
ol_u_usersresult=userService.getAllAdminUsers();
//断言
assertThat(result.getUsersList().size()).isEqualTo(2);
assertThat(result.getUsersList().get(0.getFirst_name())
.isEqualTo(user1.getFirst_name());
}
}
@Repository
public interface userRepository extends JpaRepository<ol__user, String> {

    List<ol__user> findBydtype(String dtype);

    Optional<ol__user> findById(String id);


    Boolean existsByUsername(String username);
    ol__user findByUsername(String username);

    ol__user findByEmail(String username);
    ol__user findByEmailIgnoreCase(String email);

   // @Query(value = "select count(*) as count from ol__user",nativeQuery = true)


}
ExtendWith(MockitoExtension.class)
@RunWith(MockitoJUnitRunner.class)
public class Ol_userControllerTest {
    @InjectMocks
    Ol__userController Ol__userController;
    @Mock
    userRepository userRepository;
    @Mock
    userService userService;


    @Test
    @Transactional
    public void testFindAll(){
        ol__roles role=new ol__roles();
        role.setName("tests");
        role.setRole("Admin");
        role.setIs_master(true);
        Timestamp currentSqlTimestamp = new Timestamp(System.currentTimeMillis());
        ol__user user1=new ol__user("anteaaa","nejatiaan","anteeaaaa@yahoo.com","anteaaaaa","12345","admin",true,role,"123",currentSqlTimestamp);
        ol__user user2=new ol__user("Nooria","Rajaee","Nooriaaaa@yahoo.com","Nooriaa","12345","admin",true,role,"123",currentSqlTimestamp);
        List<ol__user> list = new ArrayList<ol__user>();
        list.addAll(Arrays.asList(user1,user2));

        Mockito.when(userRepository.findBydtype(any())).thenReturn(list);
    //when
        ol__users result = userService.getAllAdminUsers();
   //then
        assertThat(result.getUsersList().size()).isEqualTo(2);
        assertThat(result.getUsersList().get(0).getFirst_name())
                .isEqualTo(user1.getFirst_name());

    }


}
Mockito.when(userRepository.findBydtype(any())).thenReturn(list);
ExtendWith(MockitoExtension.class)
@RunWith(MockitoJUnitRunner.class)
public class ControllerTest {

    @InjectMocks
    private Ol__userController Ol__userController;
    @Mock
    private userRepository userRepository;
    @Mock
    private userService userService;

    @Test
    public void testFindAll(){
        // Arrange
        ol__roles role=new ol__roles();
        role.setName("tests");
        role.setRole("Admin");
        role.setIs_master(true);
        Timestamp currentSqlTimestamp = new Timestamp(System.currentTimeMillis());
        ol__user user1=new ol__user("anteaaa","nejatiaan","anteeaaaa@yahoo.com","anteaaaaa","12345","admin",true,role,"123",currentSqlTimestamp);
        ol__user user2=new ol__user("Nooria","Rajaee","Nooriaaaa@yahoo.com","Nooriaa","12345","admin",true,role,"123",currentSqlTimestamp);
        List<ol__user> list = new ArrayList<ol__user>();
        list.addAll(Arrays.asList(user1,user2));

        Mockito.when(ol__users result = userService.getAllAdminUsers()
).thenReturn(list);

        // Act
        List<ol__user> actual = Ol__userController.getAllAdminUsers();

        // Assert
        assertThat(actual.getUsersList().size()).isEqualTo(2);
        assertThat(actual.getUsersList().get(0).getFirst_name())
                .isEqualTo(user1.getFirst_name());
    }
}
ExtendWith(MockitoExtension.class)
@RunWith(MockitoJUnitRunner.class)
public class ServiceTest {
    @InjectMocks
    private userService userService;

    @Mock
    private userRepository userRepository;

    @Test
    public void testFindAll(){
        // Arrange
        ol__roles role=new ol__roles();
        role.setName("tests");
        role.setRole("Admin");
        role.setIs_master(true);
        Timestamp currentSqlTimestamp = new Timestamp(System.currentTimeMillis());
        ol__user user1=new ol__user("anteaaa","nejatiaan","anteeaaaa@yahoo.com","anteaaaaa","12345","admin",true,role,"123",currentSqlTimestamp);
        ol__user user2=new ol__user("Nooria","Rajaee","Nooriaaaa@yahoo.com","Nooriaa","12345","admin",true,role,"123",currentSqlTimestamp);
        List<ol__user> list = new ArrayList<ol__user>();
        list.addAll(Arrays.asList(user1,user2));
        when(userRepository.findBydtype(any())).thenReturn(list);

        // Act
        ol__users result = userService.getAllAdminUsers();

        //Assert
        assertThat(result.getUsersList().size()).isEqualTo(2);
        assertThat(result.getUsersList().get(0).getFirst_name())
                .isEqualTo(user1.getFirst_name());
    }
}