googletest unit tests의 범위 분석을 위해 gcov/lcov를 사용하고 있습니다.일부 googletest 매크로의 범위 분석은 여러 줄에 걸쳐 퍼져있을 때 불완전한 적용 범위를 보여줍니다 - 이유는 무엇입니까?
반복되는 문제 중 하나는 매크로가 여러 줄에 걸쳐 퍼져있을 때 일부 googletest 매크로에 대해 테스트 코드에서 커버리지 된 줄이 표시된다는 것입니다.
나는 gov/lcov가 한 줄보다 정확할 수는 없다는 것을 알고 있지만, 내가 보는 행동에 당혹 스럽다. 누군가 이것을 설명 할 수 있습니까? 최소 예 :
g++-4.8 -Igtest/googletest/include/ --coverage -o coverage_macropp coverage_macropp.cpp gtest/googletest/make/gtest_main.a -pthread
./coverage_macropp
lcov --capture --directory . --output-file coverage.info
genhtml --demangle-cpp coverage.info --output-directory coverage
웹 브라우저의 범위 분석은 다음 라인 7, 9가 표시됩니다, 11로는 발견 :
#include <gtest/gtest.h>
TEST(coverage,incomplete)
{
// Every second line in every invocation here will show up as uncovered:
EXPECT_NO_THROW(40 +
2);
EXPECT_NO_THROW(40 + 2
);
EXPECT_NO_THROW(40 + 2)
;
}
TEST(coverage,complete)
{
// This test does not show uncovered lines
EXPECT_NO_THROW(40 + 2);
EXPECT_EQ(40
+
2
, // even though this is spread over several lines
42
)
;
}
범위 분석을 시행 하였다 어떻게
Line data Source code
1 : #include <gtest/gtest.h>
2 :
3 5 : TEST(coverage,incomplete)
4 : {
5 : // Every second line in every invocation here will show up as uncovered:
6 1 : EXPECT_NO_THROW(40 +
7 0 : 2);
8 1 : EXPECT_NO_THROW(40 + 2
9 0 : );
10 1 : EXPECT_NO_THROW(40 + 2)
11 0 : ;
12 1 : }
13 :
14 5 : TEST(coverage,complete)
15 : {
16 : // This test does not show uncovered lines
17 1 : EXPECT_NO_THROW(40 + 2);
18 1 : EXPECT_EQ(40
19 : +
20 : 2
21 : , // even though this is spread over several lines
22 : 42
23 : )
24 1 : ;
25 4 : }
왜? 그리고 EXPECT_EQ 매크로가 영향을받지 않는 이유는 무엇입니까?
gcov가 실제로 입력을 구문 분석하는 방법과 매크로 정의 방법 (예 : 토큰 붙여 넣기 여부)에 따라 달라집니다. 그래서 그것들은 설명을 찾을 두 곳입니다. – Peter