spring-data-jpa 如何使用JUnit5进行异常单元测试?

nmpmafwu  于 2022-11-10  发布在  Spring
关注(0)|答案(2)|浏览(162)

我有UserService和GET方法,它返回id找到的对象。

@Service
public class UserService {

    @Autowired
    UserRepository repository;

    public User getUserById(Long id) {
        return repository.findById(id)
                .orElseThrow(() -> new UserNotFoundException(id));
    }
}

我做了简单的测试如果用户发现:

@ExtendWith(MockitoExtension.class)
class  UserServiceTest {

    @Mock
    private UserRepository userRepository;

    @InjectMocks
    private UserService userService;

    @Test
    public void whenGivenId_shouldReturnUser_ifFound() {
        User user = new User();
        user.setId(89L);

        when(userRepository.findById(user.getId())).thenReturn(Optional.of(user));

        User expected = userService.getUserById(user.getId());

        assertThat(expected).isSameAs(user);
        verify(userRepository).findById(user.getId());
    }
}

现在我想作一个方法,让我们说:public void shouldThrowExceptionWhenUserDoesntExist()。如何在JUnit5中制作它?在JUnit4中,我会制作如下内容:

@Test(expected = UserNotFoundException.class)
    public void shouldThrowExceptionWhenUserDoesntExist() {
        User user = new User();
        user.setId(89L);
        user.setName("Test Name");

        given(userRepository.findById(anyLong())).willReturn(Optional.ofNullable(null));
        userService.getUserById(user.getId());
    }

由于此@Test(expected = UserNotFoundException.class)在JUnit5中已过时,因此我在任何地方都找不到处理JUnit5中此类异常的方法。

zed5wv10

zed5wv101#

这样做

Assertions.assertThrows(UserNotFoundException.class, () -> {
    userService.getUserById(1234);
});
pdkcd3nj

pdkcd3nj2#

您应该使用Assertions.assertThrows()。assertThrows()方法Assert执行所提供的可执行块时会抛出预期类型的异常。它采用以下参数。

static <T extends Throwable>T assertThrows(Class<T> expectedType, Executable executable)

static <T extends Throwable>T assertThrows(Class<T> expectedType, Executable executable, String message)

static <T extends Throwable>T assertThrows(Class<T> expectedType, Executable executable, Supplier<String> messageSupplier)

相关问题