Я пытаюсь написать несколько тестов для этого класса, которые должны перехватывать исключения и регистрировать их. Однако, когда я запускаю тесты, они терпят неудачу. Мои тесты показаны ниже. Я не совсем уверен, как тесты должны быть написаны, я только что показал свою попытку здесь. Я пытаюсь добиться того, чтобы аспект, который я настроил, ловил исключение, выполняя JUnit assert. Я также знаю, что правильный метод сопоставляется с помощью pointcut, потому что IntelliJ IDEA переходит к методу, которому сопоставляет pointcut, когда я щелкаю по символу слева от IDE. Имеет ли смысл мой тест, поскольку я новичок в написании тестов для АОП? Кроме того, аспект не вызывается при запуске теста.
interface UserSearch {
User findUser(long userId);
// ...
}
@Service
public class UserSearchImpl implements UserSearch{
UserRepository userRepository;
@Autowired
UserSearchImpl(UserRepository userRepository){
this.userRepository = userRepository;
}
public User findUser(long userId){
User user = userRepository.findById(userId);
if(Objects.isNull(user))){
throw new UserNotFoundException("User with id "+userId);
}
}
}
@Aspect
@Component
public class UserSearchAspect {
@AfterThrowing(
pointcut = "execution(* com.isf.services.findUser(..))",
throwing = "userNotFoundException"
)
public void logForUser(JoinPoint joinPoint , UserNotFoundException userNotFoundException)
{
}
}
@ExtendWith({SpringExtension.class , MockitoExtension.class})
@SpringBootTest
public class UserSearchAspectTest {
@MockBean
UserRepository userRepository;
UserSearch userSearch;
UserSearch proxyService;
@BeforeEach
public void setup(){
userSearch = new UserSearchImpl(userRepository);
AspectJProxyFactory factory = new AspectJProxyFactory();
factory.setTarget(userSearch);
factory.addAspectUserSearchAspect.class);
proxyService = factory.getProxy();
}
@Test //this passes
public void test(){
assertTrue(AopUtils.isAopProxy(proxyService));
}
@Test
public void testSome(){
when(userRepository.findById(123L))
.thenThrow(new UserNotFoundException("User not found "+123));
/// How do I assert the exception is caught??
}
}