2011-03-17 13 views

Respuesta

8

g no es visible fuera de f, por lo que me atrevo a decir que no, al menos no sin reflexión.

Creo que la prueba g rompería el concepto de pruebas unitarias, de todos modos, porque nunca debería probar los detalles de implementación sino solo el comportamiento público de API. El seguimiento de un error a un error en g es parte del proceso de depuración si las pruebas para f fallan.

Si la prueba g es importante para usted, defina g como método (protegido) fuera de f. Aunque eso podría romper tu diseño.

Otra idea sería llamar a assert después de la llamada de g en el código original. Esto se ejecutará durante las pruebas y generará una excepción si la propiedad no se mantiene, haciendo que la prueba falle. También estará allí en el código regular, pero el compilador puede eliminarlo ya que assert (y sus compañeros) son elidibles (ver, por ejemplo, here).

+2

+1: Estoy completamente de acuerdo. Como no puede * llamar a * 'g()', no tiene que preocuparse por ello, siempre que 'f()' se comporte correctamente, no importa cuáles sean los detalles. No hay diferencia conceptual para definir y luego llamar a 'g', o simplemente ejecutar el código en línea; es una medida interna de contabilidad que es irrelevante para la corrección del código. 'f' podría funcionar al obtener unicornios para calcular mágicamente el resultado; siempre que el resultado sea correcto y haya llegado de manera oportuna (y sin dependencias externas visibles), no es tarea de pruebas unitarias mirar debajo del capó. –

+1

@AndrzejDoyle pero si solo quiero acelerar el desarrollo (evitar la depuración) y probar todo paso a paso ... Creo que este problema es similar a http://stackoverflow.com/questions/34571/whats-the-proper- way-to-test-a-class-with-private-methods-using-junit – ichaki5748

+2

Pruebo mi código de unidad. Y entonces las pruebas me ayudan a refinar la lógica, incluso si no va a ser parte de un contrato público. En este caso, mis pruebas no son para garantizar el contrato, sino una ayuda de desarrollo. Supongo que puedo desarrollar la función fuera de la función, luego reubicarla después de terminar la lógica. – chad

Cuestiones relacionadas