如何编写一个简单的ABAP Unit Assert语句来检查任何调用,表达式或其他语句是否计算为true?
我在CL_AUNIT_ASSERT
中看不到任何基本的assert()或assert_true()方法,而我希望这些方法非常常见。我可以按如下方式估计这样的断言,但是没有更清洁的方法吗?
cl_aunit_assert=>assert_equals(
act = boolc( lv_value > 100 OR lv_value < 2 )
exp = abap_true )
cl_aunit_assert=>assert_equals(
act = mo_model->is_active )
exp = abap_true )
答案 0 :(得分:2)
对于我可以访问的版本,可能没有比你概述的更短的方式。您可以创建CL_AUNIT_ASSERT
的子类并添加自己的静态ASSERT_TRUE
方法。这样做并不是一个坏主意,同时使您的本地ABAP单元测试类成为ZCL_AUNIT_ASSERT
的子类 - 这样,您可以省略cl_aunit_assert=>
前缀,这样可以节省一些击键。
答案 1 :(得分:2)
您无法看到此类方法,因为ABAP中没有布尔类型。
在Java,C ++或C中,您可以将条件的结果分配给变量,例如
int i = 5;
boolean result = i > 3;
你不能在ABAP中做同样的事情,因为没有布尔类型。因此,在其他语言中,一个班轮,在ABAP中,它总是更加冗长。
DATA: i TYPE i VALUE 5.
DATA: result TYPE abap_bool.
IF i > 3.
result = abap_true.
ELSE.
result = abap_false.
ENDIF.
您使用的东西似乎是一项新功能,最近已添加到该语言中,并且大多数客户将长时间不使用。此外,CL_AUNIT_ASSERT
类是在新元素出现之前创建的。
所以现在,有可能把上面的东西写成一个班轮。但是语言中仍然没有布尔类型。
DATA: i TYPE i VALUE 5.
DATA: result TYPE abap_bool.
result = boolc( i > 3 ).
另一方面,没有布尔类型,但在这种情况下您可以简单地使用ASSERT_INITIAL
或ASSERT_NOT_INITIAL
,因为布尔值由X
(true)或空格模拟(假)。后者是ABAP的初始值。
答案 2 :(得分:2)
最干净的方法就是失败:
if value > limit.
cl_abap_unit_assert=>fail( ).
endif.
或提供更多信息:
cl_abap_unit=>fail( msg = 'Limit exceeded' ).
答案 3 :(得分:2)
根据您的SAP NetWeaver堆栈,您可以(或应该)使用更新的ABAP单元类'CL_ABAP_UNIT_ASSERT'。该课程可在Basis-Release&gt; = 7.02下获得。 SAP将此类声明为“FINAL”,因此无法从中继承,但另一方面,他们添加了一些ASSERT-Methods ... 比如ASSERT_TRUE方法!
以下是此方法的可能用法:
cl_abap_unit_assert=>assert_true(
exporting
act = m_ref_foo->is_bar( l_some_var )
msg = |is_bar Method fails with Input { l_some_var } |
).