{"id":14348,"date":"2018-12-04T08:00:31","date_gmt":"2018-12-04T07:00:31","guid":{"rendered":"http:\/\/192.168.20.3\/?p=14348"},"modified":"2024-12-12T11:06:59","modified_gmt":"2024-12-12T10:06:59","slug":"introduccion-tecnica-al-testeo-unitario-abap-abap-unit-testing","status":"publish","type":"post","link":"https:\/\/orekait.com\/es\/introduccion-tecnica-al-testeo-unitario-abap-abap-unit-testing\/","title":{"rendered":"Introducci\u00f3n t\u00e9cnica al testeo unitario ABAP \u2013<br><span class=\"font-300\">ABAP UNIT TESTING<\/span>"},"content":{"rendered":"<p>[et_pb_section fb_built=&#8221;1&#8243; admin_label=&#8221;section&#8221; _builder_version=&#8221;4.25.2&#8243; global_colors_info=&#8221;{}&#8221;][et_pb_row admin_label=&#8221;Imagen principal&#8221; _builder_version=&#8221;4.16&#8243; background_size=&#8221;initial&#8221; background_position=&#8221;top_left&#8221; background_repeat=&#8221;repeat&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.16&#8243; custom_padding=&#8221;|||&#8221; global_colors_info=&#8221;{}&#8221; custom_padding__hover=&#8221;|||&#8221;][et_pb_image src=&#8221;https:\/\/orekait.com\/wp-content\/uploads\/2018\/12\/ABAP-UNIT-1.png&#8221; alt=&#8221;cloud-public&#8221; title_text=&#8221;ABAP-UNIT-1&#8243; admin_label=&#8221;Imagen principal&#8221; module_class=&#8221;post-img&#8221; _builder_version=&#8221;4.25.2&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][\/et_pb_image][\/et_pb_column][\/et_pb_row][et_pb_row admin_label=&#8221;Cuerpo&#8221; _builder_version=&#8221;4.25.2&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.25.2&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_text content_last_edited=&#8221;off|desktop&#8221; admin_label=&#8221;Texto&#8221; _builder_version=&#8221;4.25.2&#8243; header_2_font_size=&#8221;24px&#8221; header_3_font_size=&#8221;20px&#8221; header_4_font_size=&#8221;17px&#8221; background_size=&#8221;initial&#8221; background_position=&#8221;top_left&#8221; background_repeat=&#8221;repeat&#8221; width=&#8221;%22671%22&#8243; height=&#8221;%22251%22&#8243; global_colors_info=&#8221;{}&#8221; content__hover_enabled=&#8221;off|hover&#8221;]<\/p>\n<p>En el\u00a0<a href=\"https:\/\/orekait.com\/blog\/introduccion-testeo-unitario-abap-unit-testing\/\" target=\"_blank\" rel=\"noopener\"><u>art\u00edculo anterior<\/u><\/a>\u00a0os hablaba de las ventajas de integrar el\u00a0<strong>ABAP Unit Testing<\/strong>\u00a0en un proceso de desarrollo. En este art\u00edculo y los siguientes nos vamos a meter en harina y empezar a ver todo desde el punto de vista t\u00e9cnico.<\/p>\n<h2><strong><u>C\u00f3mo se crea el entorno de pruebas?<\/u><\/strong><\/h2>\n<p>Para crear un entorno de pruebas unitario\u00a0<strong>es necesario crear al menos una clase local de pruebas\u00a0<\/strong>\u00a0(se pueden crear varias, ya que podemos necesitar varios entornos de pruebas diferentes). Si el elemento a testear es una clase, \u00e9sta ya dispone de un lugar espec\u00edfico al que se puede acceder desde el men\u00fa de opciones superior.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-14357 size-full\" src=\"https:\/\/orekait.com\/wp-content\/uploads\/2018\/12\/ABAP-UNIT-2.png\" alt=\"\" width=\"862\" height=\"164\" srcset=\"https:\/\/orekait.com\/wp-content\/uploads\/2018\/12\/ABAP-UNIT-2.png 862w, https:\/\/orekait.com\/wp-content\/uploads\/2018\/12\/ABAP-UNIT-2-480x91.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 862px, 100vw\" \/><\/p>\n<p>Para cualquier otro elemento a testear, la clase se debe definir\/implementar en los Includes correspondientes a las definiciones\/implementaciones locales.<\/p>\n<p>La clase local de pruebas es como cualquier otra clase habitual. S\u00f3lo presenta las siguientes particularidades en su definici\u00f3n:<\/p>\n<p><em>CLASS ltc_nombre_de_la_clase DEFINITION\u00a0<u>FOR TESTING<\/u>\u00a0<u>RISK LEVEL<\/u>\u00a0x\u00a0<u>DURATION<\/u>\u00a0y.<\/em><\/p>\n<ul>\n<li>El nombre de la clase, al que es aconsejable a\u00f1adirle el sufijo\u00a0<strong>LTC_<\/strong>\u00a0(local test class).<\/li>\n<li><u>FOR TESTING<\/u>, que evita que la clase sea ejecutada por accidente en un entorno productivo. Esta clase es segura y\u00a0<strong>s\u00f3lo se puede ejecutar en modo de prueba<\/strong>.<\/li>\n<li><u>RISK LEVEL<\/u>, que declara el nivel de riesgo de la prueba. Hay tres valores posibles:\u00a0<strong>HARMLESS<\/strong>\u00a0(no tiene efecto sobre datos persistentes ni sobre ajustes del sistema),\u00a0<strong>DANGEROUS<\/strong>\u00a0(puede modificar datos persistentes) y\u00a0<strong>CRITICAL<\/strong>\u00a0(puede modificar ajustes del sistema y Customizing).<\/li>\n<li><u>DURATION<\/u>, establece la duraci\u00f3n de los tests. Tambi\u00e9n hay tres posibles valores:\u00a0<strong>SHORT<\/strong>\u00a0(menos de un minuto),\u00a0<strong>MEDIUM<\/strong>\u00a0(entre uno y cinco minutos) y\u00a0<strong>LONG<\/strong>\u00a0(m\u00e1s de cinco minutos).<\/li>\n<\/ul>\n<p>Si cualquiera de nuestras pruebas se sale del entorno que hemos definido (en cuanto a duraci\u00f3n o en cuanto a alteraci\u00f3n de datos persistentes, etc.), su ejecuci\u00f3n se detendr\u00e1 (dependiendo de la modalidad de ejecuci\u00f3n) y obtendremos el correspondiente mensaje de error en la ventana de resultados.<\/p>\n<p>Una vez definida la clase, ya\u00a0<strong>es detectada por la herramienta ABAP Unit Browser<\/strong>\u00a0<strong>.\u00a0<\/strong>Con esta herramienta podemos\u00a0<strong>ejecutar y analizar<\/strong>\u00a0los tests que definamos en la\/s clase\/s de pruebas. Para activar la herramienta, hay que ir a la transacci\u00f3n SE80-&gt;Utilidades-&gt;Opciones-&gt;Pesta\u00f1a Workbench (general) y activar la casilla Browser de test unidad ABAP.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-14361 size-full\" src=\"https:\/\/orekait.com\/wp-content\/uploads\/2018\/12\/ABAP-UNIT-3.png\" alt=\"\" width=\"588\" height=\"412\" srcset=\"https:\/\/orekait.com\/wp-content\/uploads\/2018\/12\/ABAP-UNIT-3.png 588w, https:\/\/orekait.com\/wp-content\/uploads\/2018\/12\/ABAP-UNIT-3-480x336.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 588px, 100vw\" \/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-14365 size-full\" src=\"https:\/\/orekait.com\/wp-content\/uploads\/2018\/12\/ABAP-UNIT-4.png\" alt=\"\" width=\"272\" height=\"199\" \/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-14369 size-full\" src=\"https:\/\/orekait.com\/wp-content\/uploads\/2018\/12\/ABAP-UNIT-5.png\" alt=\"\" width=\"245\" height=\"212\" \/><\/p>\n<p>El browser detectar\u00e1 todos los elementos que poseen clase de test y nos los mostrar\u00e1 filtrados por el criterio que escojamos (paquete, clase, funci\u00f3n, autor, etc.). Desde el browser se podr\u00e1n ejecutar las clases de test que queramos pulsando el bot\u00f3n derecho del rat\u00f3n.<\/p>\n<h2><strong><u>Creaci\u00f3n de los casos de prueba<\/u><\/strong><\/h2>\n<p>Cada una de las pruebas que queramos realizar, la debemos definir como\u00a0<strong>m\u00e9todo de la clase de pruebas y a\u00f1adirle el prefijo\u00a0<u>FOR TESTING<\/u><\/strong>.<\/p>\n<p><em>METHODS Nombre_Del_M\u00e9todo_de_Pruebas FOR TESTING<\/em>.<\/p>\n<p>Esto es debido a que dentro de la clase de pruebas podemos definir todos los m\u00e9todos y miembros que necesitemos (s\u00f3lo se admiten miembros y m\u00e9todos PRIVADOS), aunque durante la ejecuci\u00f3n de la clase de pruebas\u00a0<strong>s\u00f3lo se ejecutar\u00e1n los m\u00e9todos definidos FOR TESTING<\/strong>. El resto de m\u00e9todos reciben el nombre de m\u00e9todos de ayuda y tan s\u00f3lo servir\u00e1n para hacer nuestro c\u00f3digo m\u00e1s legible y f\u00e1cil de modificar.<\/p>\n<p>Los m\u00e9todos de prueba tambi\u00e9n presentan la particularidad de que\u00a0<strong>no admiten par\u00e1metros de ning\u00fan tipo<\/strong>. Tienen que tener una estructura definida y ordenada en tres partes fundamentales que nunca deben faltar:<\/p>\n<ul>\n<li><strong>Datos de partida<\/strong>, donde se realizan las operaciones de configuraci\u00f3n de la prueba (por ejemplo, si estamos probando una funci\u00f3n, se almacenan en variables los par\u00e1metros de entrada que queremos probar).<\/li>\n<li><strong>Realizaci\u00f3n de la prueba<\/strong>, en donde el objeto de prueba es invocado (siguiendo el ejemplo, se hace una llamada a la funci\u00f3n con los par\u00e1metros definidos en el paso anterior).<\/li>\n<li><strong>Contraste de los resultados<\/strong>, en donde se comparan los resultados obtenidos por el objeto de pruebas con los resultados que esperamos obtener a priori. Esto se hace a trav\u00e9s de los m\u00e9todos de la clase\u00a0<strong>CL_ABAP_UNIT_ASSERT<\/strong>, que tiene los m\u00e9todos suficientes (EQUALS, IS_INITIAL, IS_BOUND, DIFFERS, etc.) para contrastar los resultados obtenidos (<strong>par\u00e1metro ACT<\/strong>\u00a0de los m\u00e9todos) con los esperados (<strong>par\u00e1metro EXP<\/strong>\u00a0de dichos m\u00e9todos). Si alguno de ellos difiere, el test se considera fallido y el sistema nos proporciona toda la informaci\u00f3n necesaria para saber cu\u00e1l ha sido el problema.<\/li>\n<\/ul>\n<p>Adem\u00e1s del prefijo FOR TESTING, hay 4 m\u00e9todos concretos que podemos definir si los necesitamos:<strong>\u00a0CLASS_SETUP, SETUP, TEARDOWN y CLASS_TEARDOWN<\/strong>. Estos m\u00e9todos los comentaremos a continuaci\u00f3n.<\/p>\n<p>Una vez que tenemos definida la clase de pruebas y alg\u00fan m\u00e9todo de pruebas, podemos iniciar la ejecuci\u00f3n. La ejecuci\u00f3n es c\u00edclica y tiene las siguientes fases:<\/p>\n<ul>\n<li>Ejecuci\u00f3n del m\u00e9todo est\u00e1tico<strong>\u00a0CLASS_SETUP<\/strong>. Se ejecuta\u00a0<strong><u>una \u00fanica vez<\/u><\/strong>\u00a0<strong>por cada clase de prueba<\/strong>. Sirve fijar o establecer todos los datos que van a ser comunes a todas las pruebas que se van a realizar dentro de la clase de pruebas. De esta forma, eliminaremos duplicidades en c\u00f3digo de asignaci\u00f3n de par\u00e1metros comunes.<\/li>\n<li>Ejecuci\u00f3n del m\u00e9todo<strong>\u00a0SETUP<\/strong>. Se ejecuta siempre\u00a0<strong><u>antes de cada m\u00e9todo de prueba<\/u><\/strong>. Sirve para establecer un entorno seguro de prueba. Por ejemplo, si estamos testeando un objeto de una clase determinada, en este m\u00e9todo se debe llamar al constructor del objeto y crearlo de nuevo. De esta forma, eliminamos la posibilidad de obtener falsos positivos (o negativos) debido al almacenamiento de datos de pruebas anteriores en el objeto.<\/li>\n<li><strong>Ejecuci\u00f3n del m\u00e9todo de prueba<\/strong>. En esta fase se ejecuta el m\u00e9todo de prueba (FOR TESTING) propiamente dicho.<\/li>\n<li>Ejecuci\u00f3n del m\u00e9todo<strong>\u00a0TEARDOWN<\/strong>. Se ejecuta siempre\u00a0<strong>despu\u00e9s de cada m\u00e9todo de prueba<\/strong>. Sirve para relaizar las operaciones de limpieza de memoria y datos necesarios para eliminar todo posible rastro dejado por el m\u00e9todo de prueba.<\/li>\n<li>Ejecuci\u00f3n del m\u00e9todo est\u00e1tico<strong>\u00a0CLASS_TEARDOWN<\/strong>. Se ejecuta\u00a0<strong><u>una \u00fanica\u00a0<\/u>vez por cada clase de prueba<\/strong>\u00a0tras el \u00faltimo m\u00e9todo TEARDOWN. Sirve para realizar las operaciones de limpieza de memoria y datos necesarios para eliminar todo posible rastro dejado por la clase de prueba.<\/li>\n<\/ul>\n<p>Los m\u00e9todos de prueba siempre se van a\u00a0<strong>ejecutar en un orden aleatorio<\/strong>, para que no haya posibilidad de enmascaramiento de fallos debido a un orden preestablecido.<\/p>\n<h2><strong><u>An\u00e1lisis de los resultados<\/u><\/strong><\/h2>\n<p>Tras la ejecuci\u00f3n de la\/s clase\/s de test, obtenemos los resultados. Los resultados est\u00e1n organizados en dos pesta\u00f1as:<strong>\u00a0ABAP Unit Results\u00a0<\/strong>y\u00a0<strong>Coverage Metrics<\/strong>.<\/p>\n<p>La pesta\u00f1a ABAP Unit Results nos informa de una manera sencilla, ordenada y muy visual del resultado de los diferentes tests. Luz verde indica resultado positivo y luz roja resultado negativo.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-14373 \" src=\"https:\/\/orekait.com\/wp-content\/uploads\/2018\/12\/ABAP-UNIT-6.png\" alt=\"\" width=\"778\" height=\"290\" srcset=\"https:\/\/orekait.com\/wp-content\/uploads\/2018\/12\/ABAP-UNIT-6.png 451w, https:\/\/orekait.com\/wp-content\/uploads\/2018\/12\/ABAP-UNIT-6-300x112.png 300w\" sizes=\"auto, (max-width: 778px) 100vw, 778px\" \/><\/p>\n<p>Cuando hay un error, el sistema nos da toda la informaci\u00f3n necesaria para que podamos aislarlo y corregirlo.<\/p>\n<p>La pesta\u00f1a Coverage Metrics nos da informaci\u00f3n sobre qu\u00e9\u00a0<strong>porcentaje de c\u00f3digo se ha probado<\/strong>, qu\u00e9 procedimientos se han testeado e incluso qu\u00e9 l\u00edneas de c\u00f3digo se han utilizado.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-14377 size-full\" src=\"https:\/\/orekait.com\/wp-content\/uploads\/2018\/12\/ABAP-UNIT-7.png\" alt=\"\" width=\"1366\" height=\"728\" srcset=\"https:\/\/orekait.com\/wp-content\/uploads\/2018\/12\/ABAP-UNIT-7.png 1366w, https:\/\/orekait.com\/wp-content\/uploads\/2018\/12\/ABAP-UNIT-7-1280x682.png 1280w, https:\/\/orekait.com\/wp-content\/uploads\/2018\/12\/ABAP-UNIT-7-980x522.png 980w, https:\/\/orekait.com\/wp-content\/uploads\/2018\/12\/ABAP-UNIT-7-480x256.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) and (max-width: 1280px) 1280px, (min-width: 1281px) 1366px, 100vw\" \/><\/p>\n<p>El c\u00f3digo sobre fondo verde indica c\u00f3digo utilizado en los tests, mientras que el fondo rojo nos indica c\u00f3digo no utilizado.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-14381 size-full\" src=\"https:\/\/orekait.com\/wp-content\/uploads\/2018\/12\/ABAP-UNIT-8.png\" alt=\"\" width=\"504\" height=\"273\" srcset=\"https:\/\/orekait.com\/wp-content\/uploads\/2018\/12\/ABAP-UNIT-8.png 504w, https:\/\/orekait.com\/wp-content\/uploads\/2018\/12\/ABAP-UNIT-8-480x260.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 504px, 100vw\" \/><\/p>\n<p>De esta forma, podemos ver qu\u00e9 partes del c\u00f3digo no se han testeado a\u00fan y<strong>\u00a0dise\u00f1ar m\u00e1s tests para cubrirlas<\/strong>.<\/p>\n<h2><strong><u>Conclusi\u00f3n<\/u><\/strong><\/h2>\n<p>Este art\u00edculo tan s\u00f3lo pretende ser una breve introducci\u00f3n a un tema tan importante como apasionante (a nivel te\u00f3rico y pr\u00e1ctico) y profundo. Esperamos ir explicando cosas m\u00e1s concretas en futuras entregas, como ejemplos de tests, t\u00e9cnicas para convertir c\u00f3digo existente en testeable, t\u00e9cnicas de desarrollo orientado al testeo, t\u00e9cnicas de inyecci\u00f3n de suplantadores de dependencias, ejecuci\u00f3n de Unit Tests multinivel, creaci\u00f3n de objetos esp\u00eda, automatizaci\u00f3n de la ejecuci\u00f3n de tests\u2026.en fin, el tema da para mucho. Por ahora, esperamo que os haya servido para despertar vuestra curiosidad y mentalizaros de que realizar estos test \u201ctempranos\u201d es necesario y ahorra much\u00edsimo\u00a0tiempo en debugging.<strong>\u00a0\u00a1Ahora, a convencer a vuestros responsables de desarrollo!<\/strong><\/p>\n<p>[\/et_pb_text][\/et_pb_column][\/et_pb_row][et_pb_row admin_label=&#8221;M\u00e1s informaci\u00f3n&#8221; _builder_version=&#8221;4.25.2&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.25.2&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_text _builder_version=&#8221;4.25.2&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;]<\/p>\n<p class=\"morado\">M\u00e1s informaci\u00f3n:<\/p>\n<p>[\/et_pb_text][et_pb_button button_url=&#8221;https:\/\/orekait.com\/es\/area-produccion&#8221; button_text=&#8221;M\u00e1s informaci\u00f3n&#8221; module_class=&#8221;entrada-btn&#8221; _builder_version=&#8221;4.25.2&#8243; _module_preset=&#8221;default&#8221; custom_button=&#8221;on&#8221; button_text_color=&#8221;#8156EA&#8221; button_bg_color=&#8221;RGBA(255,255,255,0)&#8221; button_border_color=&#8221;#8156EA&#8221; button_border_radius=&#8221;30px&#8221; button_font=&#8221;Plus Jakarta Sans|600|||||||&#8221; button_icon=&#8221;&#x24;||divi||400&#8243; button_icon_color=&#8221;#8156EA&#8221; button_on_hover=&#8221;off&#8221; hover_enabled=&#8221;0&#8243; global_colors_info=&#8221;{}&#8221; button_text_color__hover_enabled=&#8221;on|desktop&#8221; button_text_color__hover=&#8221;#8156EA&#8221; button_bg_color__hover_enabled=&#8221;on|hover&#8221; button_bg_color__hover=&#8221;#8156EA&#8221; button_bg_enable_color__hover=&#8221;on&#8221; button_icon_color__hover_enabled=&#8221;on|hover&#8221; button_icon_color__hover=&#8221;#ffffff&#8221; sticky_enabled=&#8221;0&#8243;][\/et_pb_button][et_pb_divider show_divider=&#8221;off&#8221; _builder_version=&#8221;4.25.2&#8243; _module_preset=&#8221;default&#8221; custom_margin=&#8221;||40px||false|false&#8221; global_colors_info=&#8221;{}&#8221;][\/et_pb_divider][\/et_pb_column][\/et_pb_row][et_pb_row use_custom_gutter=&#8221;on&#8221; admin_label=&#8221;Noticias relacionadas titulo&#8221; module_id=&#8221;fondo-articulos&#8221; _builder_version=&#8221;4.25.2&#8243; _module_preset=&#8221;default&#8221; background_color=&#8221;#f7f7f7&#8243; width=&#8221;100%&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.25.2&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_divider show_divider=&#8221;off&#8221; _builder_version=&#8221;4.25.2&#8243; _module_preset=&#8221;default&#8221; background_color=&#8221;RGBA(255,255,255,0)&#8221; custom_margin=&#8221;||40px||false|false&#8221; global_colors_info=&#8221;{}&#8221;][\/et_pb_divider][et_pb_heading title=&#8221;Quizas te pueda interesar&#8221; _builder_version=&#8221;4.25.2&#8243; _module_preset=&#8221;default&#8221; title_level=&#8221;h2&#8243; title_text_align=&#8221;center&#8221; global_colors_info=&#8221;{}&#8221;][\/et_pb_heading][et_pb_divider show_divider=&#8221;off&#8221; _builder_version=&#8221;4.25.2&#8243; _module_preset=&#8221;default&#8221; custom_margin=&#8221;||30px||false|false&#8221; global_colors_info=&#8221;{}&#8221;][\/et_pb_divider][\/et_pb_column][\/et_pb_row][et_pb_row admin_label=&#8221;Noticias relacionadas&#8221; _builder_version=&#8221;4.25.2&#8243; _module_preset=&#8221;default&#8221; width=&#8221;100%&#8221; custom_margin=&#8221;-150px||||false|false&#8221; custom_margin_tablet=&#8221;0px||||false|false&#8221; custom_margin_phone=&#8221;0px||||false|false&#8221; custom_margin_last_edited=&#8221;on|desktop&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.25.2&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_blog fullwidth=&#8221;off&#8221; posts_number=&#8221;3&#8243; include_categories=&#8221;current&#8221; show_author=&#8221;off&#8221; show_date=&#8221;off&#8221; show_pagination=&#8221;off&#8221; _builder_version=&#8221;4.25.2&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][\/et_pb_blog][\/et_pb_column][\/et_pb_row][\/et_pb_section]<\/p>\n","protected":false},"excerpt":{"rendered":"<p>En el\u00a0art\u00edculo anterior\u00a0os hablaba de las ventajas de integrar el\u00a0ABAP Unit Testing\u00a0en un proceso de desarrollo. En este art\u00edculo y los siguientes nos vamos a meter en harina y empezar a ver todo desde el punto de vista t\u00e9cnico. C\u00f3mo se crea el entorno de pruebas? Para crear un entorno de pruebas unitario\u00a0es necesario crear [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":14335,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_et_pb_use_builder":"on","_et_pb_old_content":"Lorem ipsum dolor sit amet consectetur adipiscing elit congue montes, imperdiet taciti erat elementum fermentum sem ante ultrices ridiculus, sagittis sociis egestas quisque ac semper quis odio. Aenean hendrerit ac metus dis nascetur aliquet mollis integer, rutrum vel laoreet posuere proin sagittis luctus est, tempus duis nisl ultrices parturient tempor praesent. Dignissim curabitur nascetur pellentesque augue fringilla pulvinar eros, tempus fames vehicula maecenas cubilia id, rutrum euismod integer ut scelerisque mus.\r\n\r\nVivamus auctor odio aenean rhoncus natoque dictum purus, volutpat pellentesque laoreet ridiculus consequat nisi varius euismod, augue platea convallis curae magnis taciti. Imperdiet nibh curabitur quisque orci consequat aenean pellentesque, cubilia duis senectus felis sed posuere tortor, magnis enim diam a odio sociis. Enim tellus nisl nec molestie augue luctus tempor habitant, nunc dictumst phasellus volutpat sem facilisis taciti, habitasse laoreet at turpis vel fermentum vulputate.","_et_gb_content_width":"","footnotes":""},"categories":[51],"tags":[],"class_list":["post-14348","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-user-experience-integracion"],"_links":{"self":[{"href":"https:\/\/orekait.com\/es\/wp-json\/wp\/v2\/posts\/14348","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/orekait.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/orekait.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/orekait.com\/es\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/orekait.com\/es\/wp-json\/wp\/v2\/comments?post=14348"}],"version-history":[{"count":6,"href":"https:\/\/orekait.com\/es\/wp-json\/wp\/v2\/posts\/14348\/revisions"}],"predecessor-version":[{"id":22262,"href":"https:\/\/orekait.com\/es\/wp-json\/wp\/v2\/posts\/14348\/revisions\/22262"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/orekait.com\/es\/wp-json\/wp\/v2\/media\/14335"}],"wp:attachment":[{"href":"https:\/\/orekait.com\/es\/wp-json\/wp\/v2\/media?parent=14348"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/orekait.com\/es\/wp-json\/wp\/v2\/categories?post=14348"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/orekait.com\/es\/wp-json\/wp\/v2\/tags?post=14348"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}