2014-09-22 4 views
2

간단한 ABAP Unit Assert 문을 작성하여 호출, 표현식 또는 다른 문이 true로 평가되는지 확인하려면 어떻게해야합니까?ABAP 단위의 부울 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

흠, 어쩌면 ABAP에는 부울이 존재하지 않는 때문에 :

다음은이 방법의 가능한 사용법은? – Jagger

+1

방금 ​​주현을 가지고 있습니다. boolean 타입은 없지만 boolean이'X' (true) 또는 space (false)로 에뮬레이트되므로이 경우에는 단순히'ASSERT_INITIAL' 또는'ASSERT_NOT_INITIAL'을 사용할 수 있습니다. 후자는 ABAP의 초기 값입니다. – Jagger

답변

2

당신의 SAP 넷위버 스택에 따라 할 수 있습니다 (또는한다)를 사용하여 업데이트 된 ABAP 단위 클래스 'CL_ABAP_UNIT_ASSERT '. 이 클래스는 Basis-Release> = 7.02에서 사용할 수 있습니다. SAP는이 클래스를 'FINAL'로 선언 했으므로 상속 할 수 없지만 다른 측면에서는 ASSERT_TIME ... 과 같은 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 } | 
). 
+1

수정 링크를 사용하여 답변을 다시 포맷하십시오. –

+0

흥미 롭습니다. 그 점에 대해 몰랐습니다.'FINAL' 플래그가 단지 감시 일 뿐이라서 그 플래그를 제거하면 마이그레이션이 훨씬 쉬워지기를 바랍니다. – vwegert

+0

"* SAP는이 클래스를 FINAL로 선언했습니다."물론 그랬습니다 ... 다른 사람들처럼 보입니다. [https://archive.sap.com/discussions/thread/3173204] 기괴하게도, 추가되는 ASSERT_TRUE의 온라인 문서 인 것으로 보입니다. 내가 발견 한 것은 7.0 릴리스의 구식 메소드 목록입니다. 그러나 7.40 시스템에서 클래스를 확인한 결과 메소드가 존재 함을 확인했습니다 (클래스 문서는 여기에도 시대에 뒤떨어 지지만). 이제는 원래의 질문에 가장 가까운 표준 솔루션이므로 이것을 승인 된 것으로 표시 할 것입니다. 대답. – Lilienthal

2

내가 액세스 할 수있는 릴리스의 경우, 사용자가 설명한 것보다 짧은 방법이 없을 수 있습니다. CL_AUNIT_ASSERT의 하위 클래스를 만들고 자신 만의 정적 인 ASSERT_TRUE 메서드를 추가 할 수 있습니다. 이렇게하는 것은 나쁜 생각이 아니며 동시에 로컬 ABAP Unit 테스트 클래스를 ZCL_AUNIT_ASSERT의 하위 클래스로 만듭니다. 이렇게하면 접두어 cl_aunit_assert=>을 생략하여 일부 키 입력을 줄일 수 있습니다.

2

ABAP에서 부울 유형이 없기 때문에 이러한 메소드를 볼 수 없습니다.

는 자바, C++ 또는 C에있는 동안, 당신은 더 부울이 존재하지 않는 것처럼 당신은 ABAP에서 같은 일을 할 수없는이

int i = 5; 
boolean result = i > 3; 

같은 변수에 조건의 결과를 할당 할 수 있습니다. 따라서 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 클래스는 새 요소가 언어에 오기 전에 만들어졌습니다.

지금 당장은 위의 내용을 하나의 라이너로 쓸 가능성이 있습니다. 그러나 여전히 언어에는 부울 유형이 없습니다. 부울이 중 X (true) 또는 공간 (false)를 에뮬레이션 한, 다른 한편으로

DATA: i TYPE i VALUE 5. 
DATA: result TYPE abap_bool. 

result = boolc(i > 3). 

, 아니 부울 타입이 없다,하지만 당신은 단순히이 경우 ASSERT_INITIAL 또는 ASSERT_NOT_INITIAL를 사용할 수 있습니다. 후자는 ABAP의 초기 값입니다.

2

가장 깨끗한 방법은 바로 실패하는 것입니다

if value > limit. 
    cl_abap_unit_assert=>fail(). 
endif. 

아니면 더 많은 정보 : cl_abap_unit=>fail(msg = 'Limit exceeded').