{"id":284,"date":"2013-08-08T06:46:50","date_gmt":"2013-08-08T06:46:50","guid":{"rendered":"http:\/\/karstieltopia.com\/?p=284"},"modified":"2016-02-19T20:12:23","modified_gmt":"2016-02-19T20:12:23","slug":"tests-unitarios-de-caja-blanca","status":"publish","type":"post","link":"http:\/\/karstieltopia.com\/programacion\/java\/tests-unitarios-de-caja-blanca\/","title":{"rendered":"Tests unitarios de caja blanca"},"content":{"rendered":"

A la hora de realizar tests unitarios, deber\u00edamos poder utilizar siempre la interfaz de entrada de la clase que queremos probar pero hay veces en que necesitamos probar algo que est\u00e9 en su parte privada (realmente si est\u00e1s haciendo \u00e9sto posiblemente es que est\u00e9s haciendo algo no correcto… pero hay tantas cosas no correctas en el universo que es posible que te encuentres con algo as\u00ed aunque no quieras).<\/p>\n

Usando EasyMock <\/a>no ser\u00eda posible el comprobar esos m\u00e9todos privados, pero podemos utilizar la librer\u00eda PowerMock<\/a>, la cu\u00e1l nos permitir\u00e1 acceder directamente a esa parte privada.<\/p>\n

Si todo va bien, la forma de probar m\u00e9todos privados es realmente sencilla. B\u00e1sicamente ser\u00eda algo as\u00ed:<\/p>\n

    \n
  1. Etiquetar la clase con\u00a0@RunWith(PowerMockRunner.class)<\/tt> y\u00a0\u00a0@PrepareForTest(ClassWithPrivateMethod.class)<\/tt><\/span><\/li>\n
  2. Preparar la clase que queremos probar usando lo siguiente:\n
    PowerMock.createPartialMock(ClassToPartiallyMock.class, "nameOfTheFirstMethodToMock", "nameOfTheSecondMethodToMock");<\/div><\/div>\n

    Nota: Tener en cuenta que lo anterior no<\/strong> llamar\u00e1 al constructor de la clase<\/li>\n

  3. Ponemos la llamada a la funci\u00f3n:\n
    PowerMock.expectPrivate(mockObject, "nameOfTheMethodToMock", argument1, argument2);<\/div><\/div>\n<\/li>\n
  4. Y ejecutamos el replay y la verificaci\u00f3n de la siguiente manera:\n
    PowerMock.replay(mockObject);
    \nPowerMock.verify(mockObject);<\/div><\/div>\n<\/li>\n<\/ol>\n

    \u00c9stos son los pasos b\u00e1sicos para ejecutar un m\u00e9todo privado, aunque realmente hay m\u00e1s opciones para ello<\/a>. As\u00ed mismo esta librer\u00eda tambi\u00e9n ofrece la posibilidad de atacar m\u00e9todos constructores privados y m\u00e9todos est\u00e1ticos.<\/p>\n

    Hay tambi\u00e9n otra forma de probar esos m\u00e9todos privados y es utilizar reflection casi directamente gracias a los objetos Whitebox<\/strong> que proporciona PowerMock, quedando la llamada a un m\u00e9todo privado como sigue:<\/p>\n

    Whitebox.invokeMethod(object, method, argument0, argument1,...);<\/div><\/div>\n

    Links<\/strong><\/p>\n

    EasyMock:\u00a0http:\/\/easymock.org\/<\/a><\/p>\n

    PowerMock:\u00a0https:\/\/code.google.com\/p\/powermock\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"

    A la hora de realizar tests unitarios, deber\u00edamos poder utilizar siempre la interfaz de entrada de la clase que queremos probar pero hay veces en que necesitamos probar algo que est\u00e9 en su parte privada (realmente si est\u00e1s haciendo \u00e9sto posiblemente es que est\u00e9s haciendo algo no correcto… pero hay tantas cosas no correctas en […]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"spay_email":"","jetpack_publicize_message":"","jetpack_is_tweetstorm":false},"categories":[22],"tags":[58,56,57],"jetpack_featured_media_url":"","jetpack_publicize_connections":[],"yoast_head":"\nTests unitarios de caja blanca - Karstieltopia<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"http:\/\/karstieltopia.com\/programacion\/java\/tests-unitarios-de-caja-blanca\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Tests unitarios de caja blanca - Karstieltopia\" \/>\n<meta property=\"og:description\" content=\"A la hora de realizar tests unitarios, deber\u00edamos poder utilizar siempre la interfaz de entrada de la clase que queremos probar pero hay veces en que necesitamos probar algo que est\u00e9 en su parte privada (realmente si est\u00e1s haciendo \u00e9sto posiblemente es que est\u00e9s haciendo algo no correcto… pero hay tantas cosas no correctas en […]\" \/>\n<meta property=\"og:url\" content=\"http:\/\/karstieltopia.com\/programacion\/java\/tests-unitarios-de-caja-blanca\/\" \/>\n<meta property=\"og:site_name\" content=\"Karstieltopia\" \/>\n<meta property=\"article:published_time\" content=\"2013-08-08T06:46:50+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2016-02-19T20:12:23+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary\" \/>\n<meta name=\"twitter:creator\" content=\"@karstiel\" \/>\n<meta name=\"twitter:site\" content=\"@karstiel\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"http:\/\/karstieltopia.com\/#website\",\"url\":\"http:\/\/karstieltopia.com\/\",\"name\":\"Karstieltopia\",\"description\":\"Programaci\\u00f3n, tecnolog\\u00eda y a\\u00f1adidos\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":\"http:\/\/karstieltopia.com\/?s={search_term_string}\",\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"es\"},{\"@type\":\"WebPage\",\"@id\":\"http:\/\/karstieltopia.com\/programacion\/java\/tests-unitarios-de-caja-blanca\/#webpage\",\"url\":\"http:\/\/karstieltopia.com\/programacion\/java\/tests-unitarios-de-caja-blanca\/\",\"name\":\"Tests unitarios de caja blanca - Karstieltopia\",\"isPartOf\":{\"@id\":\"http:\/\/karstieltopia.com\/#website\"},\"datePublished\":\"2013-08-08T06:46:50+00:00\",\"dateModified\":\"2016-02-19T20:12:23+00:00\",\"author\":{\"@id\":\"http:\/\/karstieltopia.com\/#\/schema\/person\/3d09a55c38c7c00e78c41fa3f71a6e75\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"http:\/\/karstieltopia.com\/programacion\/java\/tests-unitarios-de-caja-blanca\/\"]}]},{\"@type\":\"Person\",\"@id\":\"http:\/\/karstieltopia.com\/#\/schema\/person\/3d09a55c38c7c00e78c41fa3f71a6e75\",\"name\":\"karstiel\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p6AuIG-4A","_links":{"self":[{"href":"http:\/\/karstieltopia.com\/wp-json\/wp\/v2\/posts\/284"}],"collection":[{"href":"http:\/\/karstieltopia.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/karstieltopia.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/karstieltopia.com\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/karstieltopia.com\/wp-json\/wp\/v2\/comments?post=284"}],"version-history":[{"count":5,"href":"http:\/\/karstieltopia.com\/wp-json\/wp\/v2\/posts\/284\/revisions"}],"predecessor-version":[{"id":300,"href":"http:\/\/karstieltopia.com\/wp-json\/wp\/v2\/posts\/284\/revisions\/300"}],"wp:attachment":[{"href":"http:\/\/karstieltopia.com\/wp-json\/wp\/v2\/media?parent=284"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/karstieltopia.com\/wp-json\/wp\/v2\/categories?post=284"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/karstieltopia.com\/wp-json\/wp\/v2\/tags?post=284"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}