Caso de prueba de Junit para la clase de envoltura

votos
2

Tengo una clase Java que simplemente amplía una clase de biblioteca y llama a un método de su principal con un parámetro predeterminado. ¿Cómo escribo una prueba de Junit para eso? Un MockObjectTestCase es bueno también. Aquí hay un ejemplo de lo que estoy hablando:

public class ResourceBundleMessageSource {
   public String getMessage(String key, Object[] objects, Locale locale) {
      //Spring library method
   } 
}

public class MessageResource extends ResourceBundleMessageSource {
   public String getMessage(String key) {
      return (getMessage(key, null, Locale.getDefault());
   }
}

Sé que el método de envoltura ni siquiera es necesario, pero hace que las llamadas frecuentes sean más fáciles. Tenga en cuenta que la clase funciona bien, solo estoy interesado en cómo se escribe la prueba unitaria.

Publicado el 17/06/2009 a las 20:12
fuente por usuario
En otros idiomas...                            


3 respuestas

votos
3

Si estuviera dispuesto a refactorizar ligeramente su clase, recomendaría MessageResourcedelegar a una MessageSourceinstancia, en lugar de extenderla ResourceBundleMessageSource. Entonces usaría burlas en mi prueba unitaria. Algo como esto:

public class MessageResource implements MessageSource {

  private final MessageSource delegate;

  public MessageResource(MessageSource delegate) {
    this.delegate = delegate;
  }

  public String getMessage(String key) {
    return delegate.getMessage(key, null, Locale.getDefault());
  }

  // need to implement three other MessageSource methods, 
  // simple pass-throughs to delegate

}

y prueba de unidad

public class MessageResourceTest {

  private MessageSource mockDelegate;
  private MessageResource messageResource;

  @Before
  public void setUp() throws Exception {
    mockDelegate = //mock with your favorite framework, or by hand
    messageResource = new MessageResource(mockDelegate);
  }

  @Test
  public void testGetMessage() {
    String key = "foo";

    String actualMessage = messageResource.getMessage(key);

    assertEquals(key, /* get key passed to mock delegate */ );
    assertSame(Locale.getDefault(), /* get Locale passed to mock delegate */);
    assertEquals(/*expected message from mock*/, actualMessage);
  }

}
Respondida el 18/06/2009 a las 04:22
fuente por usuario

votos
2

Para este ejemplo en particular, probalby no se molestaría en probarlo.

Si necesita probarlo, intente algo como:

@Test
public void getDefaultMessage() {
  ResourceBundleMessageSource origSource = <create source>
  MessageResource subSource = <create with same criteria as origSource>
  String key = <some key that is locale-specific>
  assertEquals(origSource.getMessage(key, null, Locale.getDefault()),
               subSource.getMessage(key));
}

Si las dos primeras líneas son difíciles de escribir, entonces tiene más sentido no probarla. Si tiene varias pruebas como esta, mueva las primeras dos líneas a un accesorio de configuración.

Respondida el 17/06/2009 a las 22:24
fuente por usuario

votos
0

No creo que valga la pena escribir una prueba unitaria para eso. Si ya hay una prueba para ResourceBundleMessageSource.getMessage (), entonces eso debería ser lo suficientemente bueno.

Respondida el 17/06/2009 a las 20:29
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more