비교 기능을 위해 Boost :: Test 프레임 워크를 사용하여 단위 테스트를 작성하고 있습니다. 각 테스트 케이스에 대해 일련의 입력 요소를 만들고이를 쌍으로 비교하여 각 쌍에 대한 비교 함수의 반환 값을 확인합니다. 수동으로 작성하거나 함수를 작성할 수 있습니다. 단위 테스트에서 기능을 작성하는 것은 좋지 않습니다. 왜냐하면 우리는 실패가있을 때 유용한 정보를 얻지 못하기 때문입니다. 수동으로 각 수표를 작성하면 매우 긴 단위 테스트가 수행됩니다. 그래서 매크로를 사용하여 검사 할 요소를 반복하기로 결정했습니다. 부분적으로 테스트 케이스에서부스트 전 처리기의 반복 제한
#define CHECK_NODE_LESS(less, more) do {\
BOOST_CHECK_EQUAL(compareQueueUnderTest((less), (more)), true); \
BOOST_CHECK_EQUAL(compareQueueUnderTest((more), (less)), false); \
} while (false)
#define CHECK_NODE_ORDER_ELEMENT(r, elem1, elem2) CHECK_NODE_LESS(elem1, elem2);
#define CHECK_NODE_ORDER_INNER_LOOP(r, list, i, elem) \
BOOST_PP_SEQ_FOR_EACH(CHECK_NODE_ORDER_ELEMENT, elem, \
BOOST_PP_SEQ_REST_N(i, list))
#define CHECK_NODE_ORDER(nodes) \
BOOST_PP_SEQ_FOR_EACH_I(CHECK_NODE_ORDER_INNER_LOOP, \
BOOST_PP_SEQ_TAIL(nodes), nodes)
하지만 전체 순서는 내가 정렬 요소를 확인하기 위해 해당 요소에 CHECK_NODE_LESS
매크로를 사용하지 않으며, 그것을 잘 작동합니다 : 그것은 다음과 같습니다. 총 주문이있는 테스트 케이스에서는 CHECK_NODE_ORDER
매크로를 사용합니다. 예 :
CHECK_NODE_ORDER((node1)(rootNode1)(node2)(rootNode2));
이제이 파일은 컴파일되지 않습니다. 테스트 한 첫 번째 것은 CHECK_NODE_LESS
매크로를 주석 처리하고 전 처리기를 실행하여 생성 된 내용을 확인하는 것입니다. 그것은 내가 예상했던 것입니다 : CHECK_NODE_LESS
은 올바른 요소에 대해 호출되었습니다. 그런 다음 CHECK_NODE_LESS
을 다시 도입하고 전 처리기를 실행하여 어떤 일이 발생하는지 확인했습니다. Boost Test에서 사용 된 매크로 때문에 결과가 정말 못 생겼지 만 일부 매크로가 확장되지 않은 것을 볼 수 있습니다.
마지막으로, 나는 다음과 CHECK_NODE_LESS
을 변경하고 지금은 잘 작동 :
#define CHECK_NODE_LESS(less, more) do {\
BOOST_CHECK(compareQueueUnderTest((less), (more))); \
BOOST_CHECK(!compareQueueUnderTest((more), (less))); \
} while (false)
나는 문제 중 하나 내가 함께 BOOST_CHECK_EQUAL
를 사용하는 경우 초과 부스트 전 처리기 라이브러리의 일부 반복 한계가 있다고 생각 다른 매크로와 함께 사용하거나 컴파일러에 전 처리기 깊이 제한이 있습니다 (필자는 Clang 3.4를 사용합니다). 이 제한은 무엇이며 어떻게 늘릴 수 있습니까?
감사합니다. 솔루션이 작동합니다. 나는 적어도 bool을 확인하는 동안 해결 방법을 선호한다. – petersohn