Escolar Documentos
Profissional Documentos
Cultura Documentos
Calculadora Abap Poo
Calculadora Abap Poo
Clase ZCL_CALCULATOR
Para ejecutar las pruebas unitarias, usamos el siguiente elemento del menú:
Ejecución de pruebas unitarias
Para acceder a la clase local de prueba se utiliza el siguiente elemento del menú:
* * * * * * * * * * * * * * * * ---------------------
CLASS abap_unit_testclass DEFINITION FOR TESTING "#AU Duration Medium
* * * * * * * * * * * * * * * * ---------------------
* ===================
PUBLIC SECTION.
* ===================
* =======================
PROTECTED SECTION.
* =======================
* ====================
PRIVATE SECTION.
* ====================
TYPE-POOLS: abap.
FECHA:
METHODS: setup.
METHODS: teardown.
Endclass. "Abap_Unit_Testclass
* * * * * * * * * * * * * * * * ---------------------
* * * * * * * * * * * * * * * * ---------------------
* * * * * * * * * * * * * * * * ---------------------
METHOD setup.
* * * * * * * * * * * * * * * * ---------------------
ENDMETHOD. "Configuración
* * * * * * * * * * * * * * * * ---------------------
METHOD teardown.
* * * * * * * * * * * * * * * * ---------------------
ENDMETHOD. "desmontaje
* * * * * * * * * * * * * * * * ---------------------
METHOD clear_display.
* * * * * * * * * * * * * * * * ---------------------
act = re_display
ENDMETHOD. "Clear_Display
* * * * * * * * * * * * * * * * ---------------------
METHOD enter_digit.
* * * * * * * * * * * * * * * * ---------------------
im_digit
'Esperaba'
'0'
'Actual'
re_display
INTO error_message
SEPARATED BY space.
act = re_display
exp = '0'
msg = error_message).
* --------------------------------------------------
im_digit
'Esperaba'
'1'
'Actual'
re_display
INTO error_message
SEPARATED BY space.
act = re_display
exp = '1'
msg = error_message).
* --------------------------------------------------
im_digit = zcl_calculator => digit_2.
im_digit
'Esperaba'
'12'
'Actual'
re_display
INTO error_message
SEPARATED BY space.
act = re_display
exp = '12'
msg = error_message).
* --------------------------------------------------
im_digit
'Esperaba'
'123'
'Actual'
re_display
INTO error_message
SEPARATED BY space.
act = re_display
exp = '123'
msg = error_message).
* --------------------------------------------------
im_digit
'Esperaba'
'1234'
'Actual'
re_display
INTO error_message
SEPARATED BY space.
act = re_display
exp = '1234'
msg = error_message).
* --------------------------------------------------
im_digit
'Esperaba'
'12345'
'Actual'
re_display
INTO error_message
SEPARATED BY space.
act = re_display
exp = '12345'
msg = error_message).
* --------------------------------------------------
im_digit
'Esperaba'
'123456'
'Actual'
re_display
INTO error_message
SEPARATED BY space.
act = re_display
exp = '123456'
msg = error_message).
* --------------------------------------------------
im_digit
'Esperaba'
'1234567'
'Actual'
re_display
INTO error_message
SEPARATED BY space.
act = re_display
exp = '1234567'
msg = error_message).
* --------------------------------------------------
im_digit
'Esperaba'
'12345678'
'Actual'
re_display
INTO error_message
SEPARATED BY space.
act = re_display
exp = '12345678'
msg = error_message).
* --------------------------------------------------
im_digit
'Esperaba'
'123456789'
'Actual'
re_display
INTO error_message
SEPARATED BY space.
cl_aunit_assert => ASSERT_EQUALS (
act = re_display
exp = '123456789'
msg = error_message).
* --------------------------------------------------
im_digit
'Esperaba'
'1234567890'
'Actual'
re_display
INTO error_message
SEPARATED BY space.
act = re_display
exp = '1234567890'
msg = error_message).
* --------------------------------------------------
im_digit
'Esperaba'
'12345678901'
INTO error_message
SEPARATED BY space.
act = re_display
exp = '12345678901'
msg = error_message).
* --------------------------------------------------
im_digit
'Esperaba'
'123456789012'
'Actual'
re_display
INTO error_message
SEPARATED BY space.
act = re_display
exp = '123456789012'
msg = error_message).
* --------------------------------------------------
'Esperaba'
'123456789012'
'Actual'
re_display
INTO error_message
SEPARATED BY space.
act = re_display
exp = '123456789012'
msg = error_message).
ENDMETHOD. "Enter_Digit
* * * * * * * * * * * * * * * * ---------------------
METHOD enter_operation.
* * * * * * * * * * * * * * * * ---------------------
CLEAR is_exception.
TRY.
CATCH zcx_invalid_operation.
is_exception = abap_true.
EndTry.
exp = abap_false
CLEAR is_exception.
TRY.
CATCH zcx_invalid_operation.
is_exception = abap_true.
EndTry.
act = is_exception
exp = abap_false
CLEAR is_exception.
TRY.
CATCH zcx_invalid_operation.
is_exception = abap_true.
EndTry.
act = is_exception
exp = abap_false
CLEAR is_exception.
TRY.
CATCH zcx_invalid_operation.
is_exception = abap_true.
EndTry.
act = is_exception
exp = abap_false
msg = 'Error en la operación de multiplicación.' ).
CLEAR is_exception.
TRY.
CATCH zcx_invalid_operation.
is_exception = abap_true.
EndTry.
act = is_exception
exp = abap_true
ENDMETHOD. "Enter_Operation
* * * * * * * * * * * * * * * * ---------------------
METHOD ejecuta.
* * * * * * * * * * * * * * * * ---------------------
'Esperaba'
lv_expected
'Actual'
re_display
INTO error_message
SEPARATED BY space.
act = re_display
exp = lv_expected
msg = error_message).
lv_expected = '9.00'.
'Esperaba'
lv_expected
'Actual'
re_display
INTO error_message
SEPARATED BY space.
act = re_display
exp = lv_expected
msg = error_message).
lv_expected = '400.00'.
'Esperaba'
lv_expected
'Actual'
re_display
INTO error_message
SEPARATED BY space.
act = re_display
exp = lv_expected
msg = error_message).
lv_expected = '1.56'.
'Esperaba'
lv_expected
'Actual'
re_display
INTO error_message
SEPARATED BY space.
act = re_display
exp = lv_expected
msg = error_message).
TRY.
CATCH cx_sy_zerodivide.
is_exception = abap_true.
EndTry.
act = is_exception
exp = abap_true
'Esperaba'
lv_expected
'Actual'
re_display
INTO error_message
SEPARATED BY space.
cl_aunit_assert => ASSERT_EQUALS (
act = re_display
exp = lv_expected
msg = error_message).
ENDMETHOD. "Ejecutar
* * * * * * * * * * * * * * * * ---------------------
METHOD get_display.
* * * * * * * * * * * * * * * * ---------------------
act = re_display
* --------------------------------------------------
act = re_display
ENDMETHOD. "Get_Display
Endclass. "Abap_Unit_Testclass
ver primaabap_unit_testclass CLASE - ZCL_CALCULATOR acogió con por GitHub
Dentro del método podemos probar cuántos escenarios deseamos. En el caso estamos
probando las cuatro operaciones y más una división por cero. En la prueba unitaria
simulamos el uso de la clase ZCL_CALCULATOR. En el primer escenario probamos la
suma de los números 25 y 16 donde el resultado esperado es 41. Entramos con los
dígitos 2 y 5, la operación de suma y de ahí los dígitos 1 y 6 y ejecuta el método
EXECUTE (). La magia ocurre en el método CL_AUNIT_ASSERT => ASSERT_EQUALS
(), donde pasamos como parámetros el valor esperado, el valor del resultado de la
ejecución del método EXECUTE () y el mensaje de error. Si el valor esperado no es igual
al valor calculado se contabiliza un error. Al ejecutar las pruebas unitarias, tenemos un
informe de error:
Observe el mensaje de error: 'Error 25 + 16 Expected: 41.00 actual: 42.00'. Este mensaje
fue generado por esta prueba (de un clic en el enlace de Stack):
ABAP Unit - Escenario de suma
Corregir el error
Sabemos que el error fue en el método EXECUTE (), cuando estamos haciendo una
suma. Esto significa que el código está "roto" y debemos comprobar lo que está mal con
él. Veamos lo que está sucediendo con el método en cuestión:
METHOD ejecuta.
vl_actual = display.
CASE operand.
WHEN plus.
WHEN subtraction.
TRY.
LIMPIEZA.
display = error.
EndTry.
WHEN multiplicación.
ENDCASE.
display = vl_result.
ENDMETHOD.