从逻辑中分离数据访问
单元测试的一个重要原则是将数据访问与业务逻辑分开。一种有效的技术是定义数据访问接口。你的主类始终使用对该接口的引用,而不是直接读取或写入数据。
在生产代码中,主类将被赋予一个包装实际数据访问的对象。这可能是 select 语句,函数 mudule 调用,真的。重要的是这个类不应该执行任何其他操作。没有逻辑。
在测试主类时,你给它一个服务静态伪造数据的对象。
访问 SCARR
表的示例
数据访问接口 ZIF_DB_SCARR
:
INTERFACE zif_db_scarr
PUBLIC.
METHODS get_all
RETURNING
VALUE(rt_scarr) TYPE scarr_tab .
ENDINTERFACE.
假数据类和测试类:
CLASS lcl_db_scarr DEFINITION.
PUBLIC SECTION.
INTERFACES: zif_db_scarr.
ENDCLASS.
CLASS lcl_db_scarr IMPLEMENTATION.
METHOD zif_db_scarr~get_all.
" generate static data here
ENDMETHOD.
ENDCLASS.
CLASS lcl_test DEFINITION
FOR TESTING
DURATION SHORT
RISK LEVEL HARMLESS.
PRIVATE SECTION.
DATA:
mo_cut TYPE REF TO zcl_main_class.
METHODS:
setup.
ENDCLASS.
CLASS lcl_test IMPLEMENTATION.
METHOD setup.
DATA: lo_db_scarr TYPE REF TO lcl_db_scarr.
CREATE OBJECT lo_db_scarr.
CREATE OBJECT mo_cut
EXPORTING
io_db_scarr = lo_db_scarr.
ENDMETHOD.
ENDCLASS.
这里的想法是,在生产代码中,ZCL_MAIN_CLASS
将获得一个 ZIF_DB_SCARR
对象,该对象执行 SELECT
并返回整个表,而单元测试针对在单元测试包含中定义的静态数据集运行。