有人能解释一下为什么下面的单元测试代码给出了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));
}发布于 2016-10-28 13:51:00
这是一个已知的问题:http://trac.cppcheck.net/ticket/7542
因此,除非它是固定的,cppcheck会报告这个假阳性。
发布于 2016-10-28 13:50:36
我试着把这个写在评论里,但这里有一个想法。
据我所知,Google测试正在以以下方式使用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));
}致:
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));
}https://stackoverflow.com/questions/40306148
复制相似问题