如何编写适合测试的代码
简介
由于需求在开发过程中经常变化,你需要不断地修改代码。有时,需求的变化可能涉及到流程的完全改变。
编写可测试的代码总是比实际测试你的代码更困难。然而,从长远来看,可测试的代码使开发人员的生活比测试代码的人更容易。
你可能会面临以下情况:
你被要求修改自己的代码。你可能喜欢这个主意,但你不记得你原来写的代码的细节。
你必须修改别人的代码。这种情况并不理想,但却很常见。
如果你不能测试代码,你怎么能确定你在实施修改后不会破坏任何东西呢?多年来,我们看到的传统方法包括以下几种:
在开发环境中写一些测试,并检查是否有转储的情况。
转移到质量测试环境,再次测试。
交给功能顾问,让他们在他们的终端进行测试。
发布给用户进行用户验收测试(UAT)。
当有人遇到代码的问题时,我们很可能会责怪测试数据的差异。即使这是真的,真正的问题是,软件写得不好,不够健壮。没有真实的数据,你无法测试它。换句话说,程序有依赖性,你无法测试它。
测试驱动开发
测试驱动开发(TDD)解决了这些问题,使你能够交付高质量的软件和产品。
TDD是一个软件开发过程,它依赖于一个非常短的开发周期的重复:需求变成非常具体的测试案例,然后软件被改进,只通过新的测试。
在ABAP中,所有的代码都被转换为ABAP单元,它只不过是一段具体的代码。测试ABAP单元不一定是一个由开发人员执行的纯技术过程。因为你不需要开发人员的密钥来运行ABAP程序的单元测试,任何有适当授权显示程序或类的人都应该能够运行测试。作为一个最佳实践,只要有可能,让我们的业务专家和功能顾问参与测试。
行为驱动开发
行为驱动开发(BDD)是由TDD产生的一种软件开发过程。BDD将TDD的一般技术和原则与领域驱动设计和面向对象的分析和设计的思想相结合,为软件开发和管理团队提供共享的工具和共享的流程来协作开发软件。(维基百科)
BDD简化了测试方法,所以在ABAP单元中标注的测试方法应该有对开发人员、业务分析员和用户有意义的描述。你可以通过设置每个测试方法使其满足IT SHOULD这句话来实现。
然后在这个方法里面,你通过使用以下模式创建三个辅助方法:
- GIVEN:包括程序收到的输入或初始条件。
- WHEN: 描述你要测试的活动。
- THEN:指定成功和失败的结果。
代码演示
class lcl_test_class definition deferred.
"Allow access to private components within the class
class zcl_instruments definition local friends lcl_test_class.
class lcl_test_class definition final for testing
duration short
risk level harmless.
private section.
types: ty_guitars type standard table of zguitars with empty key.
data: mo_class_under_test type ref to zcl_instruments,
guitar_instance type ref to zcl_guitar,
guitars type ty_guitars.
guitar_to_add type ref to zcl_guitar.
guitar_to_search type ref to zcl_guitar.
mo_exception_raised type abap_bool.
found_guitars type zcl_instruments=>guitars_tab.
methods:
setup,
"User Acceptance tests:
"IT SHOULD....................
add_guitar_to_instruments for testing,
add_duplicate_and_get_error for testing,
search_within_the_instruments for testing,
"GIVEN ..................................................
given_guitar_attribs_entered,
given_initial_instruments,
"WHEN ..................................................
when_guitar_is_added,
when_same_guitar_twice,
when_guitar_is_searched,
"THEN ..................................................
then_instruments_has_guitar,
then_exception_is_raised,
then_guitar_is_found,
"Other helper methods
load_mockups returning value(re_guitars) type ty_guitars.
endclass.
参考链接:
- 点赞
- 收藏
- 关注作者
评论(0)