es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Mi assertEquals está devolviendo el nombre del paquete cuando ejecuto una prueba de Maven.

Tengo una clase TestEntry:

@Test
void testFloatConstructor() {
    Entry floatTest = new Entry(1);
    assertEquals(floatTest.number, 1, "Prueba que el constructor establece 
       el número flotante de Entry en 1");
}

<p>@Test
void testSymbolConstructor() {
    Symbol symbolTestSign = new Symbol(Symbol.MINUS);
    Entry symbolTest = new Entry(symbolTestSign);
    assertEquals(symbolTest.other, Symbol.MINUS, "Prueba que el 
        constructor establece el símbolo como signo -");
    }
```</p>

y la clase Entry actual:

```java
float number;
Symbol other;
String str;
Type type;

public Entry(float value) {
    this.number = value; 
}

public Entry(Symbol which) {
    this.other = which;
}

La prueba para testFloatConstructor() funciona bien, pero cuando ejecuto testSymbolConstructor(), el valor expected solo muestra el nombre de mi paquete (el valor actual es correcto, devuelve -). ¿Qué está causando esto? ¿No estoy construyendo la clase de símbolo correctamente?

enum Symbols {
    LEFT<em>BRACKET,
    RIGHT</em>BRACKET,
    TIMES,
    DIVIDE,
    PLUS,
    MINUS,
    INVALID
}

public static final String MINUS = "-"; 
public static final String PLUS = "+";
String symbol;

public Symbol() {
}

public Symbol(String symbol) {
    this.symbol = symbol;
}

Aún no he terminado la clase Symbol ya que estoy programando con TDD e intentando que esta prueba pase primero. Incluso con trampas/hard-coding, no puedo hacer que funcione.

¡Gracias por cualquier ayuda!

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El problema está con el constructor de la clase Symbol. La prueba testSymbolConstructor() intenta crear un nuevo objeto Symbol con un argumento de Symbol.MINUS, el cual en realidad es una constante de tipo String definida en el enum Symbols.

    Para solucionarlo, puedes cambiar el constructor de Symbol para que tome como argumento un enum Symbols en lugar de un String. Luego, puedes usar una declaración switch para asignar el valor de symbol según el enum de entrada.

    Clase Symbol actualizada:

    public enum Symbols {
      LEFT_BRACKET,
      RIGHT_BRACKET,
      TIMES,
      DIVIDE,
      PLUS,
      MINUS,
      INVALID
    }
    
    public class Symbol {
      Symbols symbol;
    
      public Symbol() {
    
      }
    
      public Symbol(Symbols symbol) {
        switch(symbol) {
          case LEFT_BRACKET:
            this.symbol = symbol;
            break;
          case RIGHT_BRACKET:
            this.symbol = symbol;
            break;
          case TIMES:
            this.symbol = symbol;
            break;
          case DIVIDE:
            this.symbol = symbol;
            break;
          case PLUS:
            this.symbol = symbol;
            break;
          case MINUS:
            this.symbol = symbol;
            break;
          case INVALID:
            this.symbol = symbol;
            break;
        }
      }
    }
    

    Luego, en la prueba testSymbolConstructor(), puedes crear un nuevo objeto Symbol con un argumento de Symbols.MINUS:

    @Test
    void testSymbolConstructor() {
      Symbol symbolTestSign = new Symbol(Symbols.MINUS);
      Entry symbolTest = new Entry(symbolTestSign);
      assertEquals(symbolTest.other.symbol, Symbols.MINUS, "Prueba que el constructor asigna el símbolo al signo -");
    }
    

    Esto debería solucionar el problema y hacer que la prueba sea exitosa.

Comments are closed.