ABAP单元中的布尔断言

时间:2014-09-22 14:16:46

标签: unit-testing sap abap

如何编写一个简单的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 )

4 个答案:

答案 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_INITIALASSERT_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 } |
).