Java 测试弹簧靴时出现问题()。然后返回零件
我试图在spring boot中测试我的代码,但我发现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
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());
}
}