有人可以向我解释为什么单元测试的以下代码在cppcheck中为n和k提供了错误unreadVariable? 组合是一个模板类,它计算n选择k的所有组合,但这在这里无关紧要。
TEST(Combinations, ChooseOne)
{
const UINT8 n = 3;
const UINT8 k = 1;
Combinations<n, k> comb;
comb.calc();
std::vector< std::vector<UINT8> > _vui8Expect = { { 2 }, { 1 }, { 0 } };
EXPECT_THAT(comb.result, ::testing::ContainerEq(_vui8Expect));
}
我可以将代码更改为以下内容,不再出现cppcheck错误。但我不喜欢这样,因为它使代码更简洁。 n,k是统计中明确定义的数量,它们使得调用中的内容更加清晰。
TEST(Combinations, ChooseOne)
{
Combinations<3, 1> comb;
comb.calc();
std::vector< std::vector<UINT8> > _vui8Expect = { { 2 }, { 1 }, { 0 } };
EXPECT_THAT(comb.result, ::testing::ContainerEq(_vui8Expect));
}
答案 0 :(得分:2)
这是一个众所周知的问题:http://trac.cppcheck.net/ticket/7542
因此,除非将其修复,否则cppcheck将报告此误报。
答案 1 :(得分:1)
我试着把它放在评论中,但这是一个想法。
据我所知,Google Tests正在以下列方式使用TEST子句:
TEST(test_case_name, test_name) {
... test body ...
}
我个人没有遇到类似的东西,但在您的情况下,您的测试用例名称和您测试的实际课程名称相同。 对我来说,这似乎是某种名称冲突。
您是否尝试过重命名
TEST(Combinations, ChooseOne)
{
const UINT8 n = 3;
const UINT8 k = 1;
Combinations<n, k> comb;
comb.calc();
std::vector< std::vector<UINT8> > _vui8Expect = { { 2 }, { 1 }, { 0 } };
EXPECT_THAT(comb.result, ::testing::ContainerEq(_vui8Expect));
}
到a:
TEST(CombinationsTest, ChooseOne)
{
const UINT8 n = 3;
const UINT8 k = 1;
Combinations<n, k> comb;
comb.calc();
std::vector< std::vector<UINT8> > _vui8Expect = { { 2 }, { 1 }, { 0 } };
EXPECT_THAT(comb.result, ::testing::ContainerEq(_vui8Expect));
}