mockito:不在测试函数中抛出错误

fd3cxomn  于 2021-07-07  发布在  Java
关注(0)|答案(1)|浏览(304)

我试着用 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");
    }

}

有人能告诉我为什么测试方法没有抛出任何错误吗?

p1tboqfb

p1tboqfb1#

缺少您的用户。 isValidUser() 检查 isEnabledUser() 第一个返回false,因为存储库不返回用户。所以呢 isValidPassword() 从未执行过,不能抛出任何异常。

相关问题