首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ABAP单元中的布尔断言

ABAP单元中的布尔断言
EN

Stack Overflow用户
提问于 2014-09-22 14:16:46
回答 4查看 1.1K关注 0票数 4

如何编写一个简单的ABAP断言语句来检查是否有任何调用、表达式或其他语句的计算结果为true?

我在assert()中看不到任何基本的CL_AUNIT_ASSERTassert_true()方法,而我认为这些方法非常常见。我可以这样的断言如下,但是没有更干净的方法吗?

代码语言:javascript
复制
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 ).
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-11-04 05:54:39

根据您的NetWeaver堆栈,您可以(或应该)使用更新的ABAP类CL_ABAP_UNIT_ASSERT。这个类可以在基础版本>= 7.02中使用。SAP将这个类声明为'FINAL‘,因此不可能从它继承,但另一方面,他们添加了一些断言-方法,如ASSERT_TRUE方法!

以下是此方法的一种可能用法:

代码语言:javascript
复制
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 }'
).
票数 3
EN

Stack Overflow用户

发布于 2014-09-22 15:24:06

对于我可以访问的版本,可能没有比您所描述的更短的方法了。您可以创建CL_AUNIT_ASSERT的子类并添加自己的静态ASSERT_TRUE方法。这样做并不是个坏主意,同时使您的本地ABAP测试类成为该ZCL_AUNIT_ASSERT的一个子类--这样,您就可以省略cl_aunit_assert=>前缀,这将保存一些击键。

票数 2
EN

Stack Overflow用户

发布于 2014-09-22 19:18:45

您看不到这样的方法,因为ABAP中没有布尔类型。

在Java、C++或C中,您可以将条件的结果赋值给变量,如下所示

代码语言:javascript
复制
int i = 5;
boolean result = i > 3;

您不能在ABAP中做相同的事情,因为没有布尔类型。因此,在其他语言中,它是一个一行,在ABAP中,它将永远是更多的prolix。

代码语言:javascript
复制
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类是在新元素进入语言之前创建的。

所以现在,有可能把上面的东西写成一条直线。但是,语言中仍然没有布尔类型。

代码语言:javascript
复制
DATA: i TYPE i VALUE 5.
DATA: result TYPE abap_bool.

result = boolc( i > 3 ).

另一方面,不存在布尔类型,但在本例中可以简单地使用ASSERT_INITIALASSERT_NOT_INITIAL,因为X (真)或空格(false)都模拟布尔值。后者是ABAP中的初始值。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25976301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档