к вашему проекту - сгенерированный код - системные вызовы и прочая низкоуровщина - UI, API - код, который будет отрефакторен - интеграционная логика под вопросом Все, что нельзя или сложно протестировать, нужно выносить в отдельные зависимости и тестировать все вокруг них 8
- Атомарность логического блока - SOLID - Принцип единственной ответственности (SRP) - Принцип открытости/закрытости (OCP) - Принцип подстановки Барбары Лисков (LSP) - Принцип разделения интерфейса (ISP) - Принцип инверсии зависимостей (DIP) - GRASP - А именно Low Coupling & High Cohesion - DRY, YAGNI и другие 14
у класса - выносить зависимости во внешние объекты - взаимодействие с внешним миром только через явные вызовы - be as local as possible - знание класса ограничено только самим классом и интерфейсами взаимодействия с другими объектами - не бояться строить правильную архитектуру 15
интерфейс взаимодействия с внешним миром) - не тестировать реализацию класса и непубличные методы - тестировать только один логический объект за раз - тестировать только одну атомарную функцию за раз - писать максимально “глупые” тесты 16
class CLASS zcl_test_taxi_ride_handler DEFINITION "class under test LOCAL FRIENDS ltc_ride_handler. CLASS ltc_ride_handler DEFINITION FOR TESTING DURATION SHORT RISK LEVEL HARMLESS FINAL. * ... ENDCLASS. 20
zif_test_taxi_ride( cl_abap_testdouble=>create( 'zif_test_taxi_ride' ) ). cl_abap_testdouble=>configure_call( lo_ride )->ignore_all_parameters( )->returning( abap_true ). lo_ride->request_payment( 1 ). 24 cl_abap_testdouble=>configure_call( lo_ride )->set_parameter( name = 'ev_from' value = VALUE geo_point( x = 1 y = 1 ) )->set_parameter( name = 'ev_to' value = VALUE geo_point( x = 2 y = 2 ) )->set_parameter( name = 'ev_rate' value = zif_test_taxi_ride=>basic )->set_parameter( name = 'ev_passenger_name' value = 'test name' ). lo_ride->get_info( ).
TO if_osql_test_environment. * at the test class setup sr_env = cl_osql_test_environment=>create( VALUE #( ( 'MARA' ) ( 'MAKT' ) ( 'ZTEST_C_MATERIAL_PLANT_AGGR' ) ) ). * at the test setup sr_env->clear_doubles( ). * in test fill local tables with test data 25 sr_env->insert_test_data( i_data = lt_mara ). sr_env->insert_test_data( i_data = lt_marc ). sr_env->insert_test_data( i_data = lt_aggr i_parameter_values = VALUE #( ( parameter_name = 'P_YEAR' parameter_value = '2018' ) ) ). *at the test class teardown sr_env->destroy( ).
bit.ly/2DRFqhx - ATC in details open.sap.com/courses/wtc1 people.sap.com/paul.hardy2 wiki.scn.sap.com/wiki/display/ABAP/ABAP+Unit +Best+Practices bit.ly/2KmZhWp - ABAP Unit on SAP Help Portal bit.ly/2Aax6VV - ABAP CDS Test Double Framework on SAP Help Portal habr.com/post/169381 30