如何编写一个简单的ABAP断言语句来检查是否有任何调用、表达式或其他语句的计算结果为true?
我在assert()中看不到任何基本的CL_AUNIT_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 ).发布于 2016-11-04 05:54:39
根据您的NetWeaver堆栈,您可以(或应该)使用更新的ABAP类CL_ABAP_UNIT_ASSERT。这个类可以在基础版本>= 7.02中使用。SAP将这个类声明为'FINAL‘,因此不可能从它继承,但另一方面,他们添加了一些断言-方法,如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 }'
).发布于 2014-09-22 15:24:06
对于我可以访问的版本,可能没有比您所描述的更短的方法了。您可以创建CL_AUNIT_ASSERT的子类并添加自己的静态ASSERT_TRUE方法。这样做并不是个坏主意,同时使您的本地ABAP测试类成为该ZCL_AUNIT_ASSERT的一个子类--这样,您就可以省略cl_aunit_assert=>前缀,这将保存一些击键。
发布于 2014-09-22 19:18:45
您看不到这样的方法,因为ABAP中没有布尔类型。
在Java、C++或C中,您可以将条件的结果赋值给变量,如下所示
int i = 5;
boolean result = i > 3;您不能在ABAP中做相同的事情,因为没有布尔类型。因此,在其他语言中,它是一个一行,在ABAP中,它将永远是更多的prolix。
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 (真)或空格(false)都模拟布尔值。后者是ABAP中的初始值。
https://stackoverflow.com/questions/25976301
复制相似问题