我的Java Spring服务器中有一个服务方法,应该将用户保存到数据库。
@Override
public User addUser(User user) {
log.info("Saving new user {} to the database", user.getUsername());
user.setPassword(passwordEncoder.encode(user.getPassword()));
return userRepository.save(user);
}
然后我有测试课。
@Slf4j
@ExtendWith(MockitoExtension.class)
public class UserTest {
@InjectMocks
UserServiceImpl userService;
@Mock
private UserRepository userRepository;
@Mock
private PasswordEncoder passwordEncoder;
@ParameterizedTest
@CsvSource({
"username, password, 1, test@test.com, admin, true",
})
void checkIfUserCanBeAdded(String username,String password,int group_id,String email,String role,Boolean active){
//given
User user = new User(username, password, group_id, email, role, active);
//when
User result = userService.addUser(user);
//then
assertSame(result.getUsername(),user.getUsername());
assertSame(result.getPassword(), user.getPassword());
assertSame(result.getGroup_id(), user.getGroup_id());
assertSame(result.getEmail(), user.getEmail());
assertSame(result.getEmail(), user.getEmail());
}
}
但显然userRepository.save()方法返回null
java.lang.NullPointerException: Cannot invoke "sensor.management.sensor_admin.domain.entity.User.getUsername()" because "result" is null
有什么解决办法?为什么它不起作用?
编辑:我决定将测试更改为下面的代码,它现在可以正常工作
@BeforeEach
public void setup(){
user = new User(1,"username", "password", 1, "test@test.com", "admin", true);
}
@Test
void checkIfUserCanBeAdded(){
//given
given(userRepository.save(user)).willReturn(user);
//when
User savedUser = userService.addUser(user);
assertNotNull(savedUser);
}
请在User result=userService.addUser(User)之前添加以下语句:
,然后重试。
Mockito.when(passwordEncoder.encode(Mockito.anyString())).thenReturn(user.getPassword());
Mockito.when(userRepository.save(Mockito.any())).thenReturn(user);