Problema com comparação de parâmetros do Enum no Java

Estou com problemas para comparar esses valores dos Enums.
Eu debuguei a aplicação e está caindo em todas as comparações de decisão. E no fim, ele da o “Saldo Insuficiente”.

public void lancarMovimento(Calendar data, BigDecimal valor, TipoMovimento tipoMovimento, String descricao) throws Exception {
        
        if (tipoMovimento.equals(TipoMovimento.credito)) {
            this.movimentos.add(new Movimento(descricao, data, valor.plus(), tipoMovimento));
        }
        
        if (tipoMovimento.equals(TipoMovimento.debito)) {
            if (this.getSaldo().compareTo(valor) >= 0) {
                this.movimentos.add(new Movimento(descricao, data, valor.negate(), tipoMovimento));
            } else {
                throw new Exception("Saldo insuficiente!");
            }
        }
    }

O código completo desta classe se encontra aqui:
https://github.com/codenome/GestaoBancaria/blob/master/src/main/java/com/lcspoo/getaobancaria/model/ContaCorrente.java

Agradeço a todos pela ajuda!

Se é tipo Enum, vc pode usar o switch/case.

Antes do compareTo, verifique se os valores estão corretos:

System.out.println("Saldo: " + saldo);
System.out.println("Valor: " + valor);
System.out.println("CompareTo: " + (saldo.compareTo(valor) >= 0));
if (this.getSaldo().compareTo(valor) >= 0) {

Essa foi a resposta de saída:
> Saldo: 0
> Valor: 300
> Tipo Movimento: credito
> Descrição: Deposito bancario
> CompareTo: false

Não encontrei problemas, fiz uns testes aqui e funcionou corretamente.

Vc pode testar o seguinte:

case debito:
 System.out.println("Parametro: " + tipoMovimento);
 System.out.println("Case: " + TipoMovimento.debito);
 if (this.getSaldo().compareTo(valor) >= 0) {

Se o parâmetro e o case imprimirem o mesmo valor, então está correto, caso contrário, aconteceu uma situação absurda.

Mais sugestoes:

  • Crie uma cópia da classe de teste, remova todas as annotation do JUnit e execute sem o JUnit. Talvez seja um problema do JUnit.
  • Tente dar um refresh no projeto.

Rapaz! Consegui aqui…
o problema estava na função getSaldo() e o uso do método .add do BigDecimal. Na verdade, ele retorna um valor…
o certo seria:

saldo = saldo.add(movimento.getValor());

Agradeço demais a colaboração!