Utilizar throw() mockito / retornar uma exceção / Opional javaData

Então, o método abaixo retorna uma exceção

@Transactional
    public EnderecoEntity salvar(EnderecoEntity endereco) {
        Optional<RuaEntity> optional = ruaService.findByRuaPorId(endereco.getRua().getId());
        if(optional.isEmpty()){
            throw new CadastroException("Rua com ID " +endereco.getRua().getId()+ " não Existe");
        }
        RuaEntity rua = optional.get();
        endereco.setRua(rua);
        return enderecoRepository.save(endereco);
    }

Não sei como fazer o teste no caso, fiz algo como no metodo abaixo

 @Test
    public void naoDeveSalvarUmEnderecoQuandoIdDaRuaNaoExiste(){

        when(ruaService.findByRuaPorId(getRua().getId())).thenReturn(Optional.empty());
        when(enderecoService.salvar(getEndereco())).thenThrow(new CadastroException("Rua com ID " + getRua().getId()+ " não Existe"));


        EnderecoEntity endereco = enderecoService.salvar(getEndereco());
        //boolean existeNome = enderecoService.salvar(getEndereco()).equals(Optional.empty());
       //System.out.println(existeNome);

        //assertNull(endereco);
        //assertEquals("Pascoal Mazilli", endereco.getRua().getLogradouro());
        verify(ruaService,times(1)).findByRuaPorId(getRua().getId());
        verify(enderecoRepository,times(0)).save(getEndereco());
    }

Não sei se está meio certo ou meio errado, dessa forma apenas lança a exceção abaixo:

Alguém poderia dar um norte, no que está certo ou errado ???