测试spring boot when()时的问题。然后返回零件

问题描述 投票:0回答:1

我正在尝试在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;
    }
}

package com.Loyalty.OpenLoyalty.Models.User.Projections;
import com.Loyalty.OpenLoyalty.Models.User.ol__user;

import java.util.ArrayList;
import java.util.List;

public class ol__users {
    private List<ol__user> usersList;
    public List<ol__user> getUsersList(){
        if (usersList== null){
            usersList=new ArrayList<>();
        }
        return usersList;
    }
    public void setUsersList(List<ol__user> usersList){
        this.usersList= usersList;
    }

}

我的控制器:

 @GetMapping("/admin")
    public ol__users getAllAdminUsers(  ){

        return userService.getAllAdminUsers();

    }

我的服务:

    @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;




            }
    }

和我的存储库:

@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","[email protected]","anteaaaaa","12345","admin",true,role,"123",currentSqlTimestamp);
        ol__user user2=new ol__user("Nooria","Rajaee","[email protected]","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);

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

java spring-boot unit-testing nullpointerexception mockito
1个回答
0
投票

是,因为您正在测试控制器并将模拟注入到控制器,所以控制器中的服务被模拟并且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","[email protected]","anteaaaaa","12345","admin",true,role,"123",currentSqlTimestamp);
        ol__user user2=new ol__user("Nooria","Rajaee","[email protected]","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","[email protected]","anteaaaaa","12345","admin",true,role,"123",currentSqlTimestamp);
        ol__user user2=new ol__user("Nooria","Rajaee","[email protected]","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());
    }
}

© www.soinside.com 2019 - 2024. All rights reserved.