我试着用 junit
以及 mockito
.
但是由于一些我不知道的原因,我无法成功地测试异常的抛出。
这是我的密码:
用户服务:
public class UserService {
private final UserRepository userRepository;
private final PasswordEncoder passwordEncoder;
public UserService(UserRepository userRepository, PasswordEncoder passwordEncoder) {
this.userRepository = userRepository;
this.passwordEncoder = passwordEncoder;
}
public boolean isValidUser(String id, String password) {
User user = userRepository.findById(id);
return isEnabledUser(user) && isValidPassword(user, password);
}
private boolean isEnabledUser(User user) {
return user != null && user.isEnabled();
}
private boolean isValidPassword(User user, String password) {
String encodedPassword = passwordEncoder.encode(password);
return encodedPassword.equals(user.getPasswordHash());
}
}
密码编码器:
public interface PasswordEncoder {
String encode(String password);
}
用户存储库:
public interface UserRepository {
User findById(String id);
}
用户:
@Getter
@Setter
@AllArgsConstructor
public class User {
private String id;
private String passwordHash;
private boolean enabled;
}
这是测试方法:
@RunWith(MockitoJUnitRunner.class)
public class UserServiceTest {
@InjectMocks
private UserService userService;
@Mock
private UserRepository userRepository;
@Mock
private PasswordEncoder passwordEncoder;
@Test(expected = IllegalArgumentException.class)
public void testThrowingRandomException() {
Mockito.when(passwordEncoder.encode(Mockito.anyString())).thenThrow(new IllegalArgumentException());
userService.isValidUser("1", "1");
}
}
有人能告诉我为什么测试方法没有抛出任何错误吗?
1条答案
按热度按时间p1tboqfb1#
缺少您的用户。
isValidUser()
检查isEnabledUser()
第一个返回false,因为存储库不返回用户。所以呢isValidPassword()
从未执行过,不能抛出任何异常。