2014-12-24 1 views
1

ASSERT 매크로 - 예 : ASSERT_FOO을 정의하고 있습니다.gtest를 정의하는 방법 ASSERT_ASSERT 매크로

매크로 정의 등에 따라 동작이 매우 복잡합니다. 테스트를 위해 테스트를 만들고 싶습니다. 나는 ASSERT_ASSERT(ASSERT_FOO(foo()))과 같은 것을 필요로한다.

이렇게하려면 누적 된 어설 션을 제거하고 테스트가 성공하는 테스트 리셋과 같은 것이 필요합니다.

if (::testing::Test::HasFatalFailure()) { 
    // reset the test ? 
} else { 
    FAIL(); 
} 

나는 어떻게 이것을 채울 수 있습니까?

답변

0
// Substitute non-verbose assert() macro 
// http://stackoverflow.com/questions/27640730/ 
#ifndef assert 
    #include <cstdlib> // abort() 
    static int assert_count  = 0; // count assertion failures 
    const unsigned ASSERT_COUNT = 15; // when to stop assertion executions 
    /** (cond ?() : cout << "cond") */ 
    #define assert(cond) \ 
     do {    \ 
      if (!(cond)) { \ 
       std::cout << ":" << __LINE__ << " fail-> " #cond "\n"; \ 
       assert_count++;         \ 
       if (ASSERT_COUNT==assert_count) { abort(); } \ 
      }             \ 
     } while (false) 
#endif 

/** "C:/DIR/SubDir/file_name.ext" ==> "file_name.ext" */ 
const char* remove_dir_name(const char* str) { 
    const char *p = str;  /* p = str+strlen(str); */ 
    while (*p != 0) { ++p; } 
    while (*p != '/' && *p != '\\' && *p != ':') { 
     if (p == str) { return str; } 
     --p; 
    } 
    return p+1; 
}